Я читаю серию книг Вы не знаете js , и у меня есть вопрос, касающийся закрытия .
var a;
function wait() {
a = 10;
return setTimeout(function timer() {
console.log('Hello closure ', a);
}, 1000)
}
const fn = wait;
fn();
console.log(a);
Если я запросил значение a в консоли без выполнения функции (fn ()), он скажет, что это undefined , что является правильным.
Теперь, если я выполню функцию fn () через 1 секунду, она напечатает Hello Closure 10 Я знаю, что таймер имеет функцию закрытия по ожиданию, поэтому он печатает это значение даже если он выполняется вне лексической области, в которой он был определен.
Но если вывести a значение в консоли сейчас ( после запуска fn () ), оно также выдаст 10 , так что, думаю, это не лексическая область действия , из глобальной области поиска поиск никогда не идет вниз (я имею в виду, что он смотрит глубоко во вложенные функции), он всегда ищет переменные вверх (переходя к объемам функций).
Так что мне интересно, является ли это замыканием или переменная только что получила другое значение после запуска функции, и все?
Надеюсь, это не глупый вопрос, спасибо!