Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Замыкание (Closure) или более полно — лексическое замыкание (Lexical closure) — это совокупность блока кода и данных того контекста, в котором этот блок порождён.
var a = 20;
function testFn() {
alert(a); // свободная переменная "а" == 20
}
// Замыкание для testFn
closureForTestFn = {
call: testFn // сама функция
lexicalContext: {a: 20} // контекст для поиска свободных переменных
};
Closures are functions that refer to independent (free) variables.
A JavaScript closure is a function having access to the scope the parent function, after the parent function has returned.
This combination of a function object and a scope (a set of variable bindings) in which the function’s variables are resolved is called a closure in the computer science literature.
Тема, по сути, избита; существует немалое количество статей, посвящённых этой структуре (некоторые из них очень хорошие, например, статья R. Cornford-a, представленная в списке дополнительной литературы), однако мы постараемся разобрать её более с теоретической точки зрения, и посмотрим, как замыкания в ECMAScript устроены изнутри.
JavaScript closures are one of life’s great mysteries. A recent survey on total Internet size
places blog posts about JavaScript closures at around 23%
Замыкания в Javascript [Часть 1]