У меня есть небольшая трудность с присущей концепцией закрытия. Я получаю основную идею, но вот что: я думал, что технически там есть "закрытие" внутри каждой функции 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-функции), где переменные могут быть сохранены, которые не могут быть доступны извне или являются постоянством ключевой части определения закрытия?
ИЗМЕНИТЬ
Только что заметил определение вики для тега "закрытия" в Stack Overflow:
Закрытие - это функция первого класса, которая ссылается (закрывается) переменные из области, в которой она была определена. Если закрытие все еще существует после того, как его определяющая область действия заканчивается, переменные, которые она закрывает будет продолжать существовать.
В то время как SO wiki, конечно же, не является окончательным авторитетом, первое предложение, похоже, коррелирует с моим пониманием термина. Второе предложение затем предлагает, как можно использовать закрытие, но это не похоже на требование.
EDIT # 2
В случае непонятного ответа на различные ответы здесь ответ на википедию и ответ тега, похоже, не имеют четкого консенсуса относительно того, что означает слово "закрытие". Поэтому, пока я ценю все ответы до сих пор, и все они имеют смысл, если вы пойдете с определением закрытия автора, я думаю, что я действительно ищу... есть ли какое-либо фактическое "авторитетное" определение слова ( а затем, если да, то как это применимо ко всему вышеперечисленному)?