|
Цитата:
let просто создает переменную в своей области видимости. А замыкание это все таки не создание переменной, а ссылка на переменную из другой области видимости. Просто let i никакого замыкания не создаст. А вот когда мы в другой области видимости создадим на нее ссылку, то это будет уже замыкание. Сборщик мусора не уничтожит эту переменную
let fun;
{
let i = 0, j = 1; // нет тут замыкания
fun = ()=> console.log(i); // а вот это уже замыкание
}
Мы в области видимости функции создали ссылку на переменную i из области действия блока. Блок отработал, переменная j исчезла. А i осталась. И будет существовать, пока жива функция. Замыкания и с var успешно делаются
var fun;
(function () {
var i = 0, j = 1; // нет тут замыкания
fun = function () { console.log(i)}; // а вот это уже замыкание
})()
Цитата:
Переменные объявленные var имеют области видимости глобального объекта или функции, но не блока. Переменная объявленная через vаr внутри блока поднимается наверх в функцию или в глобальный объект.
function foo (a) {
for (var i=0; i<a.length; i++) {...}
.....
for (var i=0; i<a.length; i++) {...}
}
эквивалентно
function foo (a) {
var i // будет только одна переменная
for (i=0; i<a.length; i++) {...}
.....
for (i=0; i<a.length; i++) {...}
}
|
| Часовой пояс GMT +3, время: 12:35. |