03.iii Function Closure
Функция в момент своего определения сохраняет ссылку на внешнее пространство имен в котором объявлена (На самом деле на всю цепочку внешних пространств, если их больше одного). Переменные, определенные во внешней области видимости будут доступны для использования внутри функции.
Такая комбинация объекта функции и внешнего пространства имен (где находятся внешние переменные используемые функцией) называется замыканием. Замыкание означает, что функция всегда сохраняет связь с внешней областью видимости неважно где и когда она вызывается..
var scope = "global scope"; // Глобальная переменная
function checkscope() {
var scope = "local scope"; // Локальная переменная
function f() {
return scope;
} // Вернет значение локальной переменной scope
return f();
}
checkscope(); // => local scope
Особую популярность этот прием получил когда одна функция порождает другую. В этом случая возвращаемая функция замкнет у себя и пространство имен внешней функции и глобальное пространство имен:
function createInc(startValue) {
return function(step) {
startValue += step;
return startValue;
};
}
const inc = createInc(5);
inc(1); // 6
inc(2); // 8
Last updated
Was this helpful?