Понимание подъема JavaScript и правдивости и лжи

Я читал о подъеме JavaScript некоторое время назад.

JavaScript Scoping and Hoisting Бен Черри
Два слова о «подъеме» Дмитрия Сошникова

и еще несколько о приведении типов в JavaScript, проверке истинности и ложности: Truth, Equality and JavaScript и некоторые другие ресурсы

И, попрактиковавшись в некоторых, я обнаружил, что упускаю важную концепцию о подъеме и переменной «правда и ложь».

1: «если» проверка истинности с повторением объявления переменной

var foo = 1; 
function bar() { 
    if (!foo) { 
    alert('inside if');
        var foo = 10; 
    } 

} 
bar();

o / p: внутри if

Сомнение: значение 'foo' равно '1', if (! foo) должно оцениваться как false , и этот блок не должен выполняться (цитата из приведенных выше ресурсов: подъем влияет только на объявление var & function , но не на выполнение). Но почему отображается это предупреждение. Это не тот случай, если я напрямую использую false (показано в приведенном ниже коде без уловок: фрагмент № 3)

2: проверка истинности «если» без объявления повторяющейся переменной

var foo = 1; 
function bar() { 
    if (!foo) { 
        alert('inside if');
    } 

} 
bar();

o / p : нет вывода; означает, что управление не введено в блок 'if'
Это то, что можно было ожидать

3: 'if' с использованием 'false' с дублированием объявления переменной

var foo = 1; 
function bar() { 
    if (false) { 
        alert('inside if');
        var foo = 10; 
    } 
} 
bar();

o / p: без вывода; означает, что элемент управления не введен в блок 'if'
Это то, чего можно было ожидать

Кто-нибудь, пожалуйста, поясните. Спасибо

5
задан manikanta 20 July 2011 в 17:37
поделиться