JavaScript范围奇怪

时间:2014-03-23 17:10:07

标签: javascript

我不明白为什么在scopeTest函数退出后全局x恢复为1。有人可以向我解释一下吗?如果我在函数的局部范围内注释掉x的定义,x将改变并指向200.否则,它仍然是1 ...... !!!

//setting global variable x to 1
var x = 1;

function scopeTest() {
    x = 200; //setting global x to 200
    alert(x); //200

    var x = 500; //creating a local variable x and setting it to 500
    alert(x); //500
}
scopeTest();
alert(x); //why is x 1 instead of 200?

1 个答案:

答案 0 :(得分:6)

欢迎来到变量吊装陷阱:
在javasript中,变量声明被移动到外部(包含)函数的开头,因此您的代码实际上等同于:

function scopeTest() {
    var x;
    x = 200; //setting local x to 200
    alert(x); //200

    x = 500; //creating a local variable x and setting it to 500
    alert(x); //500
}