Замыкание closure — это функция, которая содержит функцию. Она ссылается на свободные переменные в доступной ей области видимости.
Возвращаемая функция (внутренняя функция) создаётся внутри вызываемой функции (внешней), поэтому ─ благодаря правилам определения области, которые мы видели, ─ внутренняя функция имеет доступ к переменным и аргументам внешней функции.
Замыкания ─ мощный инструмент, но их может быть сложно понять. Однако, освоив их, вы сможете написать очень элегантный код.
Вот пример:
var saver = function (value) { return function () { return value; }; }; var retriever = saver(10); alert(retriever()); 10
Функция saver возвращает функцию, которая при вызове извлекает значение, переданное в saver. Внутренняя функция может это делать, потому что она была создана в области внешней, а функции, созданные в определённой области, сохраняют доступ к переменным в области, даже если они вызываются за её пределами.
Один из способов использования замыканий ─ это создание функций, которые действуют по-разному в зависимости от того, что было передано внешней функции. Например, вот функция add. Значение, переданное внешней функции, используется для добавления к значениям, переданным внутренней.
var add = function (a) { return function (b) { return a + b; }; }; var addFive = add(5); alert(addFive(10)); 15
Внутреннее, сохранённое здесь как addFive, имеет доступ к a при его вызове, потому что оно было создано в той же области, что и a. Внутреннее добавляет a и b и возвращает результат.
В приведённом выше примере значение inner сохраняется как addFive, потому что оно добавляет 5 ко всему, что ему передаётся. Таким же образом можно создать другую функцию добавления, использующую строки:
var hello = add('Hello '); alert(hello('tom')); Hello tom
Страницы в тему:
- Следующая страница: Node.js
- Предыдущая страница: Регулярные выражения