2016-03-27 2 views
1

Я пытался понять подъем JavaScript и из того, что я понял, пространство памяти отведено для всех объявлений переменных перед выполнением кода.Поднятие JavaScript для нескольких объявлений одной и той же переменной

Я хотел бы понять, как интерпретатор работает с помощью подъема в случае нескольких объявлений для одной и той же переменной. Рассмотрим следующий код:

console.log(a); 

//first declaration 
function a() { 
    console.log('hello'); 
} 

//second declaration 
var a = 2; 

Выход объявление функции:

function a() { 
    console.log('hello'); 
} 

Итак, я предполагаю, что первое заявление интерпретатор встречает это тот, который хранится в памяти. Однако, смена порядка деклараций на:

console.log(a); 

//first declaration 
var a = 2; 

//second declaration 
function a() { 
    console.log('hello'); 
} 

Результаты на том же выходе! Интерпретатор игнорирует первое объявление и сохраняет второе объявление в памяти. Почему это происходит? Не должно ли выход во втором случае быть undefined?

ответ

1

Ваш код будет читаться интерпретатором, как показано ниже,

function a() { 
    console.log('hello'); 
} 
var a; 
console.log(a); 
a = 2; 

так при выполнении приведенной выше коды, a будет отсылая функцию первоначально и после этого var a; строки будет выполнена, так как a не определен там , назначенное значение не будет установлено с undefined с помощью объявления переменной. Следовательно, эта строка игнорируется и печатает значение функции primitive.

Простой пример для лучшего понимания будет,

function x(){ }; 
var x; 
console.log(x); //function x(){ } 
+0

так последующие несколько объявлений игнорируются, если они пытаются установить уже назначенную значение не определено? –

+0

@TarunDugar Да точно. Уже присвоенные значения не будут заменены неопределенными с помощью объявления переменной. –

+0

Хорошо, понял! Благодарю. –