Подъем переменной - «var» с именем глобальной переменной в функции

Я практиковал некоторый сценарий и нашел случай:

Вот скрипка

В соответствии с функцией закрытия бар должен иметь доступ кvar x поэтому я ожидал предупредить 1 и условие становится ложным из-заif(!1) но это насторожилоundefined и условие становится истинным, и второе предупреждение имеет значение 10.

var x = 1;
function bar() {
    alert(x);
    if (!x) {
        var x = 10;
    }
    alert(x);
}
bar();

Так что я запутался, почему это наводит на неопределенность?

Согласно поднятию в определенной области видимости, вы определяете переменную везде, где она считается всегда определяемой сверху.

Если это связано с эффектом подъема, он все равно должен предупредить 10 вместо неопределенного.

Ответы на вопрос(2)

Ваш ответ на вопрос