JavaScript范围奇怪

JavaScript范围奇怪,javascript,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 variab

我不明白为什么在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?

欢迎来到可变提升陷阱:
在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
}

欢迎来到可变提升陷阱:
在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
}
及及