У меня есть небольшие трудности с присущей им концепцией замыкания. Я понял основную идею, но вот в чем дело: я думал, что, технически, "есть замыкание" внутри каждой функции Javascript. Цитировать Википедию:
В информатике закрытие (также лексическое закрытие, закрытие функций)
или значение функции) является функцией вместе со ссылкой
среда для нелокальных имен (свободных переменных) этой функции.
Говорят, что такая функция «замкнута» над своими свободными переменными.
Таким образом, поскольку вы можете определять переменные внутри функции, они «закрыты» для остальной части вашего кода, и поэтому я вижу это как закрытие. Итак, насколько я понимаю:
(function(){var a = 1;}())
Является (не очень полезным) примером закрытия. Или, черт возьми, даже просто так:
function(){var a = 1;}
Но, я думаю, моё понимание может быть неправильным. Другие говорят мне, что для того, чтобы что-то было замыканием, оно должно сохранять состояние, и поэтому, поскольку ничто не сохраняется за пределами этого кода, это на самом деле не замыкание. Это говорит о том, что вам нужно иметь:
function(foo){foo.a = 1;}(bar); // bar.a = 1
или даже (для обеспечения неизменяемости):
function(foo){var a = 1; bar.baz = function() { return a}}(bar); // bar.baz() = 1
Итак, технически говоря (я знаю, что некоторые из примеров практически бессмысленны, но), какие из приведенных выше примеров на самом деле являются примерами замыканий. И должно ли замыкание быть просто пробелом (т. Е. Внутри функции JS), где могут храниться переменные, к которым нельзя получить доступ извне, или же постоянство является ключевой частью определения замыкания?
EDIT
Только что заметил определение вики для тега "замыкания" в переполнении стека:
Закрытие - это первоклассная функция, которая ссылается на (закрывается)
переменные из области, в которой он был определен. Если закрытие еще
существует после того, как его определяющая область действия заканчивается, переменные, по которым он закрывается
и дальше будет существовать.
В то время как SO wiki определенно не является окончательным авторитетом, первое предложение, похоже, коррелирует с моим пониманием этого термина. Во втором предложении предлагается, как можно использовать замыкание, но оно не выглядит как .
РЕДАКТИРОВАТЬ # 2
В случае, если это не ясно из различных ответов здесь, ответа в Википедии и ответа тега, кажется, нет четкого консенсуса относительно того, что вообще означает слово «закрытие». Так что, хотя я до сих пор ценю все ответы, и все они имеют смысл, если вы согласитесь с авторским определением замыкания, я думаю, что на самом деле я ищу ... есть ли какое-либо реальное "авторитетное" определение слова ( и если да, то как это применимо ко всему вышеописанному)?