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