Есть ли случай, когда фигурные скобки не требуются для того, чтобы сделать новую область видимости, в которой можно объявить локальную переменную? Независимо от того, что я думаю, у него есть фигурные скобки: например. блоки, условия, циклы, try/catch и т. д. И, например, стрелочные функции без тел блоков, похоже, не создают новых областей.
@Bergi, что вы подразумеваете под «их параметрами»? Итак, параметры можно рассматривать как объявления переменных, верно?
да. Объявление параметра (или в случае деструктуризации я бы даже не назвал целевой идентификатор «параметром») действительно создает локальную переменную в области действия функции.
Цикл for
с let
создает область видимости:
let x = "hello world";
for (let x = 0; x < 10; x++) console.info(x); // numbers ...
console.info(x); // "hello world"
В этом коде нет { }
.
Стрелочные функции делать создают новую область, но не создают новую привязку this
.
let x = "hello world";
let y = () => { let x = "new scope"; console.info(x); };
y(); // "new scope"
console.info(x): // "hello world"
Хм, действительно! Забыл об этом. Спасибо! :-) Так и для..оф, и для..ин тоже... Может что-то еще?
Верно, любая из форм for
, которые позволяют объявление с let
или const
, сделает это.
Я имел в виду arrow functions without block bodies
, исправил. Извиняюсь
@NurbolAlpysbayev да, это правда, хотя в любом случае не может быть объявления let
или const
без тела блока.
Стрелочные функции всегда создают новую область для своих параметров, с телом блока или без него.