-
Najpierw deklarujesz zmienna width i height wiec powinny one byc "undefined" poniewaz nie przypisales do nich zadnej wartosci.
-
Później zlecasz pobranie obrazka, które będzie troche trwać więc zawartość funkcji load wykona się chwilę po
alert(width); // tutaj 'undefined'
Powyższy kod wyświetli wartosc undefined ponieważ funkcja load się jeszcze nie wykonała.
- Wykonuje się kod zawarty w funkcji load (pewnie na innym wątku i chyba dlatego takie cos jak przykrycie jednego alerta drugim jest mozliwe), przypisuje wartość do zmiennej width i wyświetla komunikat, który przykrywa komunikat wyświetlony w pkt. 2. Aby to zobaczysz proponuje zmodyfikować kod poza ciałem funkcji load do następującej postaci
alert("Jaskis dlugi tekst rozszerzajacy wyskakujace okno z wartoscia undefined" + width); // tutaj 'undefined'
Wtedy zobaczysz dwa alerty jeden na drugim
-
Klikasz na przycisk w alercie z poprawna wartoscia (ten z funkcji load) co powoduje przypisanie poprawnej wartosci height i odsłonięcie okienka z wartościa undefined.
-
Poza funkcja load masz dwa alerty - pierwszy alert wstrzyma wykonywanie kodu w obszarze poza funkcja load. Tzn dopóki nie zamkniesz tego alerta to nie wykona sie ostatni alert. Jak juz go zamkniesz to wtedy zmienna height zdazy sie zainicjalizować.
To chyba tak dziala, bo prawde mowiac o tej godzinie ciezko sie co kolwiek debuguje.