Что такое замыкание closure?

Замыкание 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

Страницы в тему:

Добавить комментарий