Спасибо за ответ. @patrick dw и вы оба ответили правильно (на самом деле спасибо за игнорирование моего невежества). Но я могу принять только один ответ, и, как мистер Патрик ответил первым, я принял его. Кстати, я тоже ответил на ваш ответ. Благодарю.
ал о подъеме JavaScript некоторое время назад.
JavaScript Scoping and Hoisting от Бен Черри
Два слова о «подъеме» Дмитрия Сошникова
и еще немного о приведении типов в JavaScript, правде и ложном тесте:Правда, Равенство и JavaScript и какой-то другой ресурс
И, практикуясь с некоторыми из них, я обнаружил, что мне не хватает некоторого важного понятия о подъеме и переменной «истина и ложь».
1: проверка истинности «если» с дублированием объявления переменныхvar foo = 1;
function bar() {
if (!foo) {
alert('inside if');
var foo = 10;
}
}
bar();
о / р:inside if
Сомнение: значение 'foo' равно '1',if(!foo)
следует оценитьfalse
и этот блок не должен выполняться (цитирование вышеуказанных ресурсов: подъем влияет только наvar
& function
декларация, но не исполнение). Но почему это предупреждение показано. Это не тот случай, если я использую напрямуюfalse
(показано в приведенном ниже коде без трюков: фрагмент № 3)
var foo = 1;
function bar() {
if (!foo) {
alert('inside if');
}
}
bar();
о / р:нет выхода; означает, что управление не введено, если блок
Это то, что можно было ожидать
var foo = 1;
function bar() {
if (false) {
alert('inside if');
var foo = 10;
}
}
bar();
о / р:нет выхода; означает, что управление не введено, если блок
Это то, что можно было ожидать
Кто-то, пожалуйста, уточните. Спасибо