范围链 - JavaScript

时间:2014-03-25 08:12:49

标签: javascript

我是JavaScript的新手,在学习的过程中我感到很困惑。不确定问题的标题。

直截了当 -

var a = 4,
    say = console.log,
    globalA; // defined global variable's


doSome();
doSomeMore();

function doSome() {
    say(a);
    var a = 5;
    say(++a);
}

function doSomeMore() {
    say(a);
}

当我运行它时,这会给出

  

未定义

     

6

     

4

为什么在doSome执行时,a的值为undefined而不是4

2 个答案:

答案 0 :(得分:3)

您要找的是hoisting

它实质上意味着当您在函数中声明var a时,它会移到顶部,并且等于以下内容:

function doSome() {
    var a; //initialize the variable using hoisting
    say(a); //undefined
    a = 5;
    say(++a);
}

如果您移除var中的var a = 5,则按照您的要求删除它,然后引用全局a变量:

function doSome() {
    say(a); //4
    a = 5;
    say(++a);
}

答案 1 :(得分:0)

更改您的代码

function doSome() {
    say(a);
    var a = 5;
    say(++a);
}

function doSome(){

var a = 5;
say(a);
say(++a);

}