![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 283 Pomógł: 11 Dołączył: 11.10.2004 Skąd: 3c Ostrzeżenie: (10%) ![]() ![]() |
Witam
Mam taki problem, nie wiem jak przekazac zmieniajaca sie zmienną w funkcji. Już tłumacze o co mi chodzi... Efekt mojego kodu jest taki, ze przekazuje sie zmienna wstepnie zdeklarowana i przekazana do funkcji (w przykladzi pomoc1 / pomoc2), natomiast funkcja juz tej zmiennej nie nadpisuje wg instrukcji... Czy ktos wie jak poprawnie to sformułowac? Przyklad: Kod var pomoc1=0;
var pomoc2=0; odb(pomoc1); odb(pomoc2); function odb(pomocnik) { if(pomocnik==0) //wykonuje sie tylko do pierwszej deklarcja { if (jakis_warunek) { //jakis kod } else pomocnik=1; //to nadpisanie nie chce dzialac } else // tym samym ta czesc sie w ogole nie wykonuje { if (jakis_warunek) { //jakis kod } else pomocnik=0; } } |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 450 Pomógł: 135 Dołączył: 18.11.2010 Skąd: Wschowa Ostrzeżenie: (0%) ![]() ![]() |
Witaj.
Nie jestem pewien, czy to najlepsze rozwiązanie, ale wiem że działa.
Modyfikowałeś zmienną lokalną, a nie tą, którą przekazałeś w parametrze. Raczej unikaj pisania kodu w zasięgu globalnym. Poczytaj o funkcjach natychmiastowych. Jak otwierasz klamry - rób to w tej samej linii kodu - w JS to czasami jest zgubne. Pozdrawiam. -------------------- “ Computers are good at following instructions, but not at reading your mind. ” - Donald Knuth |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 350 Pomógł: 512 Dołączył: 4.01.2009 Skąd: Wrocław / Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Nie za bardzo wiem co Ci nie działa/działa. W skrócie co chcesz osiągnąć.
Prawdopodobnie chodzi o: zmienne globalne lub return. Kod var y;
y = 5; alert(y); y = test(y); alert(y); function test( x ){ return x+2; } -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 450 Pomógł: 135 Dołączył: 18.11.2010 Skąd: Wschowa Ostrzeżenie: (0%) ![]() ![]() |
Witaj kamil4u!
Volume chciałby użyć funkcji tak jakby przekazywał referencję do zmiennej. Czyli, że wszystkie operacje wewnątrz funkcji zmienią przekazaną w parametrze zmienną. Pozdrawiam -------------------- “ Computers are good at following instructions, but not at reading your mind. ” - Donald Knuth |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 717 Pomógł: 120 Dołączył: 18.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
najprostszy sposósb to chyba "owinac" zmienne w jednoelementowa tablicę przy podawaniu ich do funkcji (bo tablice są zawsze w JS przekazywane przez referencję, tak samo jak obiekty i funkcje. Liczby i napisy zas są niestety przekazywane tylko przez wartość).
czyli zamiast robic: Kod var zmienna = 14, rozbisz Kod var zmienna = [14]; i traktujesz zmienna jako 1-elementowa tablice i jak chcesz sie do niej dostac to przez nawiasy kwadratowe, po której wpisujesz liczbę zero: Kod alert(zmienna[0]) /* wyswietli "14"*/ jednak przy samym przekazywaniu do funkcji, piszesz juz bez nawiasow kwadratowych. Dzięki temu przekażesz do funkcji jednoelementową tablicę ze zmienną w środku: Kod jakasFunkcja(zmienna); function jakasFunkcja(zmienna) { alert("Zmienna: " + zmienna[0]); zmienna[0] = 25; } //drugie rozwiazanie, wymagajace nieco pisania, ale za to bardzo proste przy późniejszym uzyciu to opakowanie zmienną w funkcję (za pomocą tzw. closure): Kod function robZmienna(wartoscPoczatkowa) { var zmienna = wartoscPoczatkowa; return function getSet(nowaWartosc) { if (typeof nowaWartosc != 'undefined') zmienna = nowaWartosc; return zmienna; } } a potem zamiast podawac bezposrednio zmienna, podajemy do funkcji getter/setter do zmiennej. Kod function robCos(getSet) {
// funkcja getSet dziala troche jak funkcje jQuery: // foo() bez parametru zwraca aktualna wartosc, foo(5) ustawia wartosc na 5 alert("w srodku funkcji, zmienna wynosi: " + getSet()); getSet(5); } var pomoc1 = robZmienna(0); alert("zmienna przed zmiana: " + pomoc1() ); robCos(pomoc1); alert("zmienna po zmianie: " + pomoc1() ); robCos(pomoc1); Ten post edytował PrinceOfPersia 6.02.2013, 19:00:43 -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 31.07.2025 - 07:50 |