Что будет выведено в консоль?
Коллеги, всем привет. Не понимаю, почему в консоль будет выведено 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
Почему?
- Переменная
aобъявлена и имеет значениеhello. - В блоке
elseфункцииb()переменнойbприсваивается значениеman(Поэтому и выводится это значение) - Поскольку переменная
aв блокеifне переопределяется (условиеif (false)не выполняется),console.log(a)выведетundefined, так как переменнаяaиз блокаifне имеет отношения к переменнойaиз внешней области видимости функцииb.
Т.е необходимо убрать создание переменной var a='world';, а сделать присваивание уже существующей глобальной переменной a='world';.
Автор решения: Евгений Панкратов
→ Ссылка
будет значение переменной a = undefined, а значение переменной b = man. Верхняя переменная a относится к глобальной области видимости, а не к функциональной.