Рубрики
Без рубрики

JavaScript и Scope II – функции

Как вы видели в предыдущей статье о области JavaScript, функция может создать новую область, которую DE … помеченный JavaScript.

Как вы видели в Предыдущая статья о JavaScript Scope Функция может создать новую область, которая определяет значение для использования, когда у нас есть две разные переменные с одинаковым именем.

Но определяется ли область применения, где объявляется функция или где выполняется функция?

var i = 10;

function foo() {
  var i = 2;
}

function bar() {
  i = i + 1;
  console.log ('value of i when bar is declared outside foo: ', i);
}


foo();

bar();

Редактировать в jsfiddle

В примере выше это должно быть очевидно это я будет иметь значение 11 Когда Консоль.log пробеги. Но что произойдет, если мы запустим бар Внутри Фу ? Ответ может удивить вас, если вы новичок в JavaScript.

var i = 10;

function foo() {
  var i = 2;

  bar();

}

function bar() {
  i = i + 1;
  console.log ('value of i when bar is declared outside foo: ', i);
}


foo();

Редактировать в jsfiddle

я переменная снова будет иметь значение 11 Когда Консоль.log пробеги.

Потому что бар Объявлено в глобальном объеме, он меняет значение я переменная, которая существует в той же глобальной области. Даже когда он работает внутри Фу , он не ссылается на я объявлен внутри foo сфера.

Итак, что произойдет, если мы объявим функцию стержня внутри Фу функция?

var i = 10;

function foo() {
  var i = 2;

  function bar() {
    i = i + 1;
    console.log ('value of i when bar is declared inside foo: ', i);
  }

  bar();

}

foo();

Редактировать в jsfiddle

Надеюсь, вы догадались, что Консоль.log покажет я Имея ценность 3 . бар Функция объявлена внутри охвата foo функция, поэтому он изменит и выведет значение я переменная, объявленная в foo сфера.

Многие языки программирования работают так, но не все из них, поэтому приятно знать словарный запас для этого. Когда применение определяется тем, где объявляется функция (где она записывается в исходном коде), мы называем ее лексическим применением. JavaScript использует лексическую область.

Узнайте больше о сфере масштаба в JavaScript и Scope III – Функции стрелы

Оригинал: “https://dev.to/tchaffee/javascript-and-scope-ii-4i4e”