Например, почему на строчке 9 происходит вызов функции, определённой на строчке 11?
Почитай про всплывание (hoisting). Коротко, все function declaration что ты определяешь в глобальном скоупе всплывают и попадают в global или window (для браузера) скоуп. на самый верхний уровень т. e … function g() { return "1"; } … function g() { return «2»; }
на самом деле будут на самом верху:
global.g = functin g() { return "1"; }
global.g = functin g() { return «2»; }
console.log(f()); … console.log(a); ...
ну и последний global.g перепишет предыдущий поэтому будет только global.g = functin g() { return «2»; }
Почитай про всплывание (hoisting). Коротко, все function declaration что ты определяешь в глобальном скоупе всплывают и попадают в global или window (для браузера) скоуп. на самый верхний уровень т. e … function g() { return "1"; } … function g() { return «2»; }
на самом деле будут на самом верху:
global.g = functin g() { return "1"; }
global.g = functin g() { return «2»; }
console.log(f()); … console.log(a); ...
ну и последний global.g перепишет предыдущий поэтому будет только global.g = functin g() { return «2»; }
Ну и это работает только для function declaration для function expressions (клозюр) уже нет
Строго говоря, это всегда замыкание, просто в вырожденном случае оно ничего не замыкает (из окружения). Кроме this, если arrow function.
Все верно. Просто в JS замыкания которые захватили хоть одну переменную или this (в случае с arrow function) принято называть замыканиями, а все остальные функциями / анонимными функциями, что бы хоть как то разделять
Все верно. Просто в JS замыкания которые захватили хоть одну переменную или this (в случае с arrow function) принято называть замыканиями, а все остальные функциями / анонимными функциями, что бы хоть как то разделять