2015-06-11 2 views
0
var x = 5; 

function a() { 

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

    b(); 
    var x = 6; 
} 

a(); 

В console.log(x), выход undefined. Но если я изменяю,JS переменная область охвата

var x = 5; 

function a() { 

    function b() { 
     console.log(x); 
    } 
    b(); 
    x = 6; // remove `var` 
} 

a(); 

затем выход 5.

Почему такое поведение? Пожалуйста, объясните мне.

ответ

2

В первом примере локальная переменная x поднята вверху области видимости, то есть функция, в которой она объявлена. Он работает так же, как если бы он был объявлен в верхней части:

var x = 5; 

function a() { 
    var x; 

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

    b(); 
    x = 6; 
} 

a(); 

Поскольку локальная переменная не присваивается значение до функции b называется, это содержит undefined.

+0

Per [* ECMA-262 *] (http://ecma-international.org/ecma-262/5.1/#sec-10.5) на этапе * 8 c ii *, переменные, созданные посредством объявления переменной, первоначально назначаются значение * undefined *, поэтому return * undefined * до тех пор, пока не будет присвоено какое-либо другое значение. – RobG

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