JS变量范围

时间:2015-06-11 23:08:06

标签: javascript

$('#modalTBMSubmit').on('click', function (e){
    e.preventDefault();

var x = 5; function a() { function b() { console.log(x); } b(); var x = 6; } a(); 中,输出为console.log(x)。但如果我换到,

undefined

然后输出为5.

为什么会这样?请解释一下。

1 个答案:

答案 0 :(得分:2)

在第一个示例中,局部变量x被提升到范围的顶部,即声明它的函数。它的工作方式与在顶部声明的方式相同:

var x = 5;

 function a() {
     var x;

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

     b();
     x = 6;
 }

 a();

由于在调用函数b之前未为局部变量赋值,因此它包含undefined