Zmienne podnoszenie - „var” z nazwą zmiennej globalnej w funkcji

Ćwiczyłem jakiś scenariusz i znalazłem przypadek:

Oto skrzypce

Zgodnie z funkcją zamknięcia pasek powinien mieć dostępvar x więc spodziewałem się, że zaalarmuję 1 i warunek stanie się fałszywy z powoduif(!1) ale to zaalarmowałoundefined a warunek get true, a drugi alert ma wartość 10.

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

Więc jestem zdezorientowany, dlaczego to podpowiada niezdefiniowane?

Zgodnie z podnoszeniem w określonym zakresie definiujesz zmienną w dowolnym miejscu, w którym zawsze uważany jest za zdefiniowany.

Jeśli jest to spowodowane efektem podnoszenia, nadal musi zaalarmować 10 zamiast niezdefiniowanych.

questionAnswers(2)

yourAnswerToTheQuestion