Как вы видели в Предыдущая статья о 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”