Вопросы о JavaScript для собеседования: #1 23.06.2015

Наверное, самый распространенный вопрос на область видимости и поднятие переменных в JavaScript формулируется примерно так:

Что станет результатом выполнения кода?

var a = 5;

function test() {
	console.log(a);
	a = 2;
	console.log(a);
	var a = 3;
	console.log(a);
 }

test();
console.log(a);

Ответ: в консоль будет последовательно выведено undefined, 2, 3, 5.

undefined выведен первым вызовом console.log в теле функции test. Согласно принципу поднятия определения переменных в JavaScript при исполнении кода тела функции test известно, что в области видимости определена локальная переменная a. На момент вызова первого console.log операций присвоения значения этой переменной еще не было, поэтому логируется значение undefined. Дальше все просто, последовательные присвоения значений локальной переменной и вывод этих значений в консоль. Значение глобальной переменной осталось неизменным. Приведенный участок кода для интерпретатора JavaScript равносилен следующему:

var a = 5;

function test() {
	var a;
	console.log(a);
	a = 2;
	console.log(a);
	a = 3;
	console.log(a);
 }

test();
console.log(a);

by 23.06.2015