Зачем при вызове функции ставят две двойные скобки?
Вот пример
var a = 1;
function getFunc() {
var a = 2;
var func = function() { alert(a); };
return func;
}
getFunc()(); // 2, из LexicalEnvironment функции getFunc
Зачем ставят getFunc()()? в чём разница между getFunc() ?
Функция getFunc() возвращает другую функцию (та что в переменной func). Вот вторые скобки нужны затем, чтобы вызвать функцию, которую вернула getFunc().
Можно сделать так:
var func = getFunc();
func(); // тут уже сработает alert(), который она вызывает
Правильным синтаксисом при инициализации результата замыкания обычно называют такой: (getFunc())();
Тогда становится немного понятнее логика выражения.
Что б вернуть не функцию, а результат который она возвращает.
Второй скобкой Вы как бы вызываете внутреннюю функцию которая берет выводит переменную a из замыкания.
Если скобки опустить, то return внешней функции вернет Вам не результат а саму функцию.
Иван: замыкание - способность функции запоминать контекст(e.g. LexicalEnvironment), в которой она была создана.
Например в примере ТС func запоминила a из области своего создания, а потом, будучи вызванной уже вне этой области вернула это значение.
Иван: да это время нужно для понимания. Тоже не мог вьехать сначала. Советую почитать про них и забить на время, потом вернуться. Оно само придет со временем, 100%
Если на пальцах но у каждой функции есть область видимости. С внутренней функции мы можем доставать переменные с внешней функции. И еще менять. Это называют "брать из замыкания".
Вообще, на сколько я знаю, то в функциональном программировании такой подход не приветствуется.
Yaroslav Rostanets: То есть пока можно без них первое время?То запоролся у Кантору в учебнике,и дальше не иду,считая что без них дальше ничего не освою :D