2013-03-30 3 views
2

Я попытался следующий код:Странное поведение по глобальной и локальной переменной в JavaScript

var a = 5; 

function x() { 
    console.log(a); 
} 

x(); 

Он работает, как ожидалось и печатает 5.

Но я изменил код так глобальной переменной а будет перезапись следует:

var a = 5; 

function x() { 
    console.log(a); 
    var a = 1; 
} 

x(); 

Он печатает нестандартно. Это не имеет смысла для меня, так как переписывание должно происходить сразу после console.log (a). Так в чем проблема?

ответ

5

Это происходит потому, что ваша вторая переменная a «поднимается» вверху функции, и она скрывает первый a. Что на самом деле происходит это:

var a = 5; 

function x() { 
    var a; 
    console.log(a); 
    a = 1; 
} 

x(); 

Here is an article on hoisting from adequately good для дальнейшего чтения по этому вопросу.

+0

Когда переменная поднимается, ее значение также не поднимается? Например, почему wasnt выражение var a = 1; водрузили. И почему просто var a; – smk

+0

Значение не поднимается, потому что вы устанавливаете его в этой позиции, рассмотрите пример инициализации переменной, которая будет равна содержимому другой переменной, которая не была бы заполнена в начале функции. Установка его на 1 приведет к поломке потока программы. –

+0

Ах. Имеет смысл. Спасибо. – smk

0
var a = 5; 

function x() { 
    var a = 1; 
console.log(a); 
} 

x(); 

необходимо инициализировать переменную a до console.log();

Смежные вопросы