Я недавно читал о замыканиях, и я немного запутался, поэтому у меня возникло несколько вопросов.
Поэтому я думал о замыкании, как всякий раз, когда вы используете переменную внутри функции, которая находится где-то за пределами вашегонепосредственная лексическая сфера.Другое определение, которое я часто слышу, это: «Сохранение копии переменных в том же состоянии, в каком они были до завершения выполнения функции».
Итак, допустим, у меня есть функция с закрытой переменной:
function foo() {
var x = 'abc';
return function() {
return x;
}
}
var bar = foo();
console.dir(bar) // [[Scopes]] - 0: Closure { x: 'abc' }
Когда я console.dir и проверяю, что находится внутри замыкания, я вижу, что свойство x имеет значение 'abc'.
Я немного растерялся относительно того, как x остается«Alive» внутри внутренней функции, когда родительские (внешние) переменные функции отбрасываются и сборщик мусора (.. я предполагаю) в javascript сразу после выполнения родительской функции.
Итаккогда я возвращаю определение внутренней функции в переменную bar, я предполагаю, что она также содержит ссылку и формирует замыкание?(Возможно, я ошибаюсь, это то, где я запутался).
Также, когда я формирую замыкание, и замыкание содержит переменные из области видимости его родителя, создает ли оно новую копию этой переменной и сохраняет ее взакрытие или это просто ссылка на переменную извне функции и изменяет ее значение?потому что я думал, что переменная 'x' будет отброшена, как только родительская функция будет выполнена?
Извините за глупый и длинный вопрос, но было бы неплохо, если бы кто-то мог прояснить это abit для меня.