Запись в блоге о JavaScript

В статье “Давайте выучим замыкания в JavaScript”

В части

Замыкания

var x = 10;

function foo() {
  var y = x + 5;
  return y;
}

function bar() {
  var x = 2;
  return foo();
}

function main() {
  foo(); // Статическая область: 15; Динамическая область: 15
  bar(); // Статическая область: 15; Динамическая область: 7
  return 0;
}

Что за динамическая область, при любом исходе не получается там 7, вроде значения в двух случаях всегда 15

ну эт чисто показать, что

function bar() {
  var x = 2;
  return foo();
}

не равно:

function bar() {
  var x = 2;
  return ( function() {
    var y = x + 5;
    return y;
  })();
}

или

function bar() {
  var x = 2;

  function foo() {
    var y = x + 5;
    return y;
  }
  return foo();
}

т.к. функция запоминает окружение в котором описана. потому что если бы она этого не делала, то возвращала 7

1 лайк