Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JS] Włąsna funkcja reaz zwraca true a raz undifined
pehaperowiec
post
Post #1





Grupa: Zarejestrowani
Postów: 91
Pomógł: 8
Dołączył: 26.09.2011

Ostrzeżenie: (10%)
X----


Kod
function zagadka() {
    var dec=confirm("Czy 2+2=5?");
    if(dec===false) {
        var wynik=prompt("No to w takim razie podaj poprawny wynik");
        if(parseInt(wynik)===4) {
            alert("rewelacja!");
            return true;
        } else {
            alert("Szło Ci dobrze ale padłeś! Spróbuj jeszcze raz");
            zagadka();
        }
    } else {
        alert("No to słaby jesteś z matmy! Spróbuj jeszcze raz");    
        zagadka();
    }
}

document.write(zagadka());
Dlaczego raz zostaje wypisane undifined a raz true? Od czego to zależy?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


1. Każda przeglądarka posiada jakiegoś rodzaju narzędzia deweloperskie - niektóre przez dodatkową wtyczkę (Opera Dragonfly, Firefox Firebug). Osobiście najlepiej pracowało mi się zawsze z tymi z Chromea. Google jak zwykle służy pomocą: https://www.google.com/search?q=chrome+debu...me&ie=UTF-8
2. Ustaw sobie breakpointa na pierwszej linii swojej funkcji (wywołaniu window.confirm()), a następnie wykonuj swój kod krok po kroku. Najpierw podaj, że 2+2 równa się 5, następnie, gdy Twoja funkcja opierniczy Cię, żeś tuman z matematyki, podaj, że 2+2 nie równa się 5, a równa się 4. O ile drugie (wewnętrzne) wywołanie funkcji zwróci TRUE o tyle pierwsze (zewnętrzne/pierwotne) wywołanie funkcji nie zwraca już nic (UNDEFNIED).
3. Ponieważ console.log() umożliwia Ci wygodne wyświetlenie dowolnych danych (tablic, obiektów, funkcji jak i samym typów prostych). Jest to po prostu specjalne narzędzie do prostego debugowania swojego kodu.

@PrinceOfPersia: Korzystając z setTimeout/setInterval nadal zaśmiecasz callstacka, ponieważ wywołanie funkcji jest rekurencyjne. Musiałbyś skorzystać ze zwykłej pętli tutaj. Nie mniej jednak problem poruszony przez autora jest "specyficzny" dla funkcji rekurencyjnych.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 14:56