В чем разница внутренней функции и функции параметра в цепочке областей действия? - PullRequest
0 голосов
/ 06 мая 2019

Я знаю, что контекст выполнения JavaScript создается при вызове функции. Но я не понимаю пример ниже. Пример 1 и Пример 2 очень похожи.

Однако эти результаты не совпадают.

Я уже ссылался на ссылки. You-Don't-Konw JS и Ссылка на блог и , относящиеся к вопросу stackoverflow

Пример 1

var value = "Hello";

function bar() {
  var value = "Bye";

  function foo() {
    return value;
  }

  console.log(foo());
}

bar(); // Bye

Пример 2

var value = "Hello";

function foo() {
  return value;
}

function bar(func) {
  var value = "Bye";
  console.log(func());
}

bar(foo); // Hello

Я ожидал, что оба примера - пример 1 и пример 2 - пока. Если контекст выполнения JavaScript создается во время вызова функции, почему эти два результата отличаются?

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Два value здесь разные;они просто названы одинаково.Вы можете думать о них как value в глобальной области видимости и value в области действия bar.Как и файлы с одинаковыми именами в двух разных каталогах, они на самом деле не одинаковы.

0 голосов
/ 06 мая 2019

Закрытие зависит от того, где была создана функция, а не от того, где она была вызвана. Функция foo в примере 2 не имеет доступа к локальной переменной value функции bar. Поэтому из-за закрытия значение, возвращаемое из foo, равно value глобальной области видимости.

...