Подъем переменной - «var» с именем глобальной переменной в функции
Я практиковал некоторый сценарий и нашел случай:
В соответствии с функцией закрытия бар должен иметь доступ кvar x
поэтому я ожидал предупредить 1 и условие становится ложным из-заif(!1)
но это насторожилоundefined
и условие становится истинным, и второе предупреждение имеет значение 10.
var x = 1;
function bar() {
alert(x);
if (!x) {
var x = 10;
}
alert(x);
}
bar();
Так что я запутался, почему это наводит на неопределенность?
Согласно поднятию в определенной области видимости, вы определяете переменную везде, где она считается всегда определяемой сверху.
Если это связано с эффектом подъема, он все равно должен предупредить 10 вместо неопределенного.