Недавно я наткнулся на этот код javascript на конкурентном сайте и не мог понять, как это работает.
var a= 1;
(function(){
console.info(a);
var a = 2;
console.info(a);
})();
Я ожидал, что результат будет..
1 2
Но, к моему удивлению, исходный вывод был...
undefined 2
Может кто-нибудь объяснить, как это работает? Заранее спасибо.
Это необычайно распространенный пример. Конечно, есть много объяснений в Интернете.
Объявление переменной a
вынесено в начало области видимости. Этот процесс называется подъемом.
var a= 1;
(function(){
var a;
console.info(a);
a = 2;
console.info(a);
})();
Рассмотрим общий фрагмент без IIFE и глобальной переменной.
function func(){
console.info(x)
var x = 2;
console.info(x)
}
func()
Объявление x
поднимается в начало области действия функции. Таким образом, приведенный выше код такой же, как
function func(){
var x; //x is declared and its value is undefined
console.info(x)
x = 2;
console.info(x)
}
func()
Это локализация, я считаю. Функция создает новую локализованную область «Глобальный».