Как стать автором
Обновить

Комментарии 13

Функция — это не замыкание.
В определении замыкание — это функция вместе со средой. У Сошникова почти так же
Замыкание (Closure) или более полно — лексическое замыкание (Lexical closure) — это совокупность блока кода и данных того контекста, в котором этот блок порождён.

var a = 20;
function testFn() {
  alert(a); // свободная переменная "а" == 20
}

// Замыкание для testFn
closureForTestFn = {
  call: testFn // сама функция
  lexicalContext: {a: 20} // контекст для поиска свободных переменных
};
Замыкание — это связь функции с переменными снаружи этой функции. Это связь, и ничего более. Функция — отдельное понятие. Замыкание — отдельное. Не надо путать людей, усложнять.
Если честно, я не знаю функционального программирования, но думаю что такое определение дано для того, чтобы лучше описать реализацию замыканий именно в javascript. В данной статье (и спецификации ecmascript) подробно описан этот процесс. Функция это объект (возможно это вас тоже запутает), который имеет свойство [[scope]]. Оно ссылается на цепь областей видимости и создается во время создания объекта функции. Если данная информацию усложняет вам понимание javascript, то не советую читать данную статью (что вы естественно не делали) и тем более спецификацию.
Видите ли, я занимаюсь функциональным программированием не первый год. И JavaScript в частности, хотя, конечно, я работаю и с куда более продвинутыми языками функционального программирования. Поэтому определение из вашей статьи лично меня запутать не может. Оно может запутать менее опытных программистов, на которых, по всей видимости, статья и была рассчитана.

Статью я, разумеется, читал.
Определение из MDN
Closures are functions that refer to independent (free) variables.

Определение из w3schools
A JavaScript closure is a function having access to the scope the parent function, after the parent function has returned.

The Definitive Guide
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.


Подробности см. в ECMA-262-3 10.1.4 и 13.2
dmitrysoshnikov.com/ecmascript/ru-chapter-6-closures/
Тема, по сути, избита; существует немалое количество статей, посвящённых этой структуре (некоторые из них очень хорошие, например, статья R. Cornford-a, представленная в списке дополнительной литературы), однако мы постараемся разобрать её более с теоретической точки зрения, и посмотрим, как замыкания в ECMAScript устроены изнутри.

Статьи Сошникова конечно проще читать и возможно даже полезнее, но на данную статью довольно часто ссылаются в том числе и сам Сошников поэтому решил перевести.
Нагуглил список книг, ссылающихся на эту статью, просто оставлю его здесь.

Список
JavaScript by Example
By Ellie Quigley

JavaScript Cookbook
By Shelley Powers

Beginning Ajax
By Chris Ullman, Lucinda Dykes

Learning JavaScript: Add Sparkle and Life to Your Web Pages
By Shelley Powers

Advanced ASP.NET AJAX Server Controls For .NET Framework 3.5
By Adam Calderon, Joel Rumerman

Pro JavaScript Techniques
By John Resig

Ajax Design Patterns
By Michael Mahemoff

AJAX and PHP: Building Modern Web Applications
By Bogdan Brinzarea, Audra Hendrix

Ajax in Action
By Dave Crane, Eric Pascarello

Microsoft Ajax Library Essentials: Client-side ASP. NET Ajax 1. 0 Explained
By Bogdan Brinzarea
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации