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