Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 31.01.2021, 22:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

denis_alekss,
не додумались при создании языка )))

https://learn.javascript.ru/var
Ответить с цитированием
  #12 (permalink)  
Старый 31.01.2021, 23:07
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от рони
да
Ну смотря что называть замыканием.
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)}; // а вот это уже замыкание
})()


Сообщение от denis_alekss
По какой причине var не создает замыкания и не сохраняет i за каждой итерацией?
См пост #3.
Переменные объявленные 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++) {...}
}

Последний раз редактировалось voraa, 31.01.2021 в 23:23.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер срабатывает раньше времени или вообще не срабатывает Terebonko Элементы интерфейса 6 03.08.2017 12:43
Не срабатывает последний цикл arkadii_parovozov Общие вопросы Javascript 7 01.12.2016 16:36
Как подчинить себе цикл wreder jQuery 16 20.11.2013 22:17
Цикл завешивает страницу, помогите Romingood jQuery 5 19.10.2013 14:30
AJAX запрос в Internet Explorer срабатывает через раз nikolayseo jQuery 5 13.11.2012 00:13