@dron112

Где здесь замыкание?

Для меня замыкание это когда функция объявлена в одной области видимости, а вызывается в другой, но в момент вызова имеет доступ к тем переменным которые находятся в первой области видимости ?

Я знаю что в данном примере есть замыкание, но не могу его точно найти.
Так как не понимаю что тут вызывается вне своей области видимости, по-моему здесь нет замыкания, а есть обычный поиск переменной по лексической области видимости. Но один человек сказал что тут точно есть замыкание. Помоги разобрать этот код

- - Он сказал на 55 минуте

let arr = [1, 2, 3, 4, 5]

for(var i = 0; i <= arr.length; i++ ) {
    
    (function(y){
        setTimeout(() => {
            console.log(y)
        }, 1500)

    }(i))
    
}
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
У тебя есть immediately invoked function
(function(y){ }(i))
в которую ты передаешь i в качестве параметра
И есть коллбек
() => { console.log(y) }
который выполняется асинхронно (на самом деле не важно как он выполняется)
В это колбеке ты используешь переменную y которая взята из области IIFE, которую твой коллбек фактически "замкнул" от уборки сборщиком мусора, иначе бы она была убрана значительно раньше.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы