JavaScript: понимание цепочки областей видимости
Какова цепочка контекста в следующем фрагменте кода -
var name = 'John';
function foo() {
if (false) {
var name = 'James';
}
console.log(name);
}
foo();
Я получил пару запросов по этому поводу -
- Почему регистратор в функции
foo
печатаетundefined
даже когда переменная доступна в глобальной области видимости? Это связано с тем, что та же самая переменная повторно объявлена в блоке условных ложных значений, и поэтому глобальная переменная удаляется из области видимости? - Также, если мы заменим объявление переменной в операторе if внутри функции
foo
отvar
вlet
регистратор внутри функцииfoo
печатает имя из глобальной области видимости Как это работает?
2 ответа
Решение
Да, это потому, что переменные объявлены с var
имеют область действия функции, и они поднимаются на вершину function
, Это логи undefined
из-за подъема.
Переменные, объявленные с let
есть область блока так до if
блок не выполняется переменная name
не объявлено
Даже если вы измените это с if(true)
это не будет работать, потому что переменная будет доступна только внутри блока. {}
не снаружи.
Вот пример того, как let
работает.
if(true){
let x = 3
}
console.log(x);
Если вы переопределите переменную с var
, он имеет область действия во всей функции. Если вы делаете это с let
вместо var
, он будет доступен только в if
объем.
var name = 'John';
function foo() {
if (false) {
let name = 'James';
}
console.log(name);
}
foo();