Что будет выведено в консоль?

Коллеги, всем привет. Не понимаю, почему в консоль будет выведено man, undefined?

var a = 'hello';

function b() {
  if (false) {
    var a = 'world';
  } else {
    var b = 'man';
  }
  console.log(b);
  console.log(a);
}
b();

По-поводу вывода значения переменной b = man мне понятно, а вот почему переменная а будет неопределена, не понимаю. В моем понимании а должно быть равно hello, т.к. при вызове функции b() значение переменной а должно взяться из внешней переменной, разве не так?


Ответы (2 шт):

Автор решения: Danila Kartovitskii

Правильно: man undefined

Почему?

  1. Переменная a объявлена и имеет значение hello.
  2. В блоке else функции b() переменной b присваивается значение man (Поэтому и выводится это значение)
  3. Поскольку переменная a в блоке if не переопределяется (условие if (false) не выполняется), console.log(a) выведет undefined, так как переменная a из блока if не имеет отношения к переменной a из внешней области видимости функции b.

Т.е необходимо убрать создание переменной var a='world';, а сделать присваивание уже существующей глобальной переменной a='world';.

→ Ссылка
Автор решения: Евгений Панкратов

будет значение переменной a = undefined, а значение переменной b = man. Верхняя переменная a относится к глобальной области видимости, а не к функциональной.

→ Ссылка