Я читал о подъеме JavaScript некоторое время назад.
JavaScript Scoping and Hoisting Бен Черри
Два слова о «подъеме» Дмитрия Сошникова
и еще несколько о приведении типов в JavaScript, проверке истинности и ложности: Truth, Equality and JavaScript и некоторые другие ресурсы
И, попрактиковавшись в некоторых, я обнаружил, что упускаю важную концепцию о подъеме и переменной «правда и ложь».
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)
var foo = 1;
function bar() {
if (!foo) {
alert('inside if');
}
}
bar();
o / p : нет вывода; означает, что управление не введено в блок 'if'
Это то, что можно было ожидать
var foo = 1;
function bar() {
if (false) {
alert('inside if');
var foo = 10;
}
}
bar();
o / p: без вывода; означает, что элемент управления не введен в блок 'if'
Это то, чего можно было ожидать
Кто-нибудь, пожалуйста, поясните. Спасибо