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();
Другие вопросы по тегам