Похоже, что многие люди говорят о настоящей путанице здесь ...
Хорошо, поэтому, когда вы говорите
// scope A
for(let i = 0; i<5; i++) {
//scope B
}
мы знаем, i
- это , а не , заявленный в области A. (Это одна из самых больших проблем, которые let
решает.) Так что, похоже, это должно быть объявлено в области B. Но как насчет этого случая?
// scope A
for(let i = 0; i<5; i++) console.log(i);
Цикл for все же должен иметь свою собственную область видимости, чтобы i
не попадал в область A. И мы можем продемонстрировать это.
let i = 37;
for(let i = 0; i < 5; i++) console.log(i);
console.log(i); // prints 37
Теперь, если оператор for
уже имеет область действия, даже если у него нет фигурных скобок, то что произойдет, если мы заменим console.log(i)
оператором блока? Хорошо, что оператор блока получает свою собственную область. Так что на самом деле у нас есть
// Scope A
for( //scope B is actually here
let i = 0; i < 5; i++) {
// Scope C
}