Спасибо за ответ. @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)

2: проверка истинности «если» без дублирования объявления переменных
var foo = 1; 
function bar() { 
    if (!foo) { 
        alert('inside if');
    } 

} 
bar();

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

3: «если», используя «ложь» с дублированием объявления переменных
var foo = 1; 
function bar() { 
    if (false) { 
        alert('inside if');
        var foo = 10; 
    } 
} 
bar();

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

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

Ответы на вопрос(1)

Ваш ответ на вопрос