Что содержится в переменной test
?
var a = 1;
function f(){
window.test = a;
var a = 2;
}
f();
undefined
Объявление переменных в JavaScript всегда переносится интерпретатором наверх тукущей области видимости (scope), в независимости от того, где была объявлена переменная. Подобное поведение называется "поднятием переменных", или на английском hoisting. Важно понимать, что во время подобного "поднятия переменной" ей не присваивается значение, то есть, фактически, код представленный выше будет интерпретироваться следующим образом:
var a = 1;
function f(){
var a; // a === undefined
window.test = a; // a === undefined, test === undefined
a = 2; // a === 2
}
f();
В данном случае объявление переменной поднимается наверх до обявления переменной test
. Таким образом test
не получит значения переменной a
, объявленной в области видимости, находящейся выше.