Źródło: Arkusze CKE
Jaki będzie wynik działania poniższego kodu w języku JavaScript?
function foo() {
console.log(a);
var a = 1;
console.log(a);
}
foo();
Warianty odpowiedzi
-
A
undefined, undefined
-
B
1, 1
-
C
undefined, 1
-
D
ReferenceError, 1
Wyjaśnienie
Tutaj dotykamy jednego z klasycznych tematów rekrutacyjnych i egzaminacyjnych, czyli mechanizmu hoistingu (podnoszenia).
W JavaScript deklaracje zmiennych tworzonych przez słowo kluczowe var są automatycznie przenoszone na sam początek zakresu funkcji. Podnosi się jednak tylko sama deklaracja zmiennej, a nie przypisanie jej wartości.
Dla interpretera ten kod wygląda tak, jakby zmienna var a została zadeklarowana na samej górze funkcji foo(), ale nie miała jeszcze przypisanej żadnej wartości.
Dlatego pierwsze console.log(a) widzi istniejącą zmienną, ale wypisuje undefined. Dopiero linijkę niżej przypisujesz wartość 1, więc drugie wywołanie wypisuje 1.