首页 > 在局部作用域内对全局变量重新赋值会不会影响到全局作用域?

在局部作用域内对全局变量重新赋值会不会影响到全局作用域?

var a=1;
function f(){
    a=2;
}
f();
console.log(a);  //a=2;
function f(){
    var a=1;
    if(a){
        a=2;
    }
}
f();
console.log(a);  //undefined
function foo() {
    var x = 1;
    if (x) {
        (function () {
            var x = 2;
        }());
    }
    console.log(x);// 为啥x还是=1
} 

先不说楼上那个问题。
来咱们把你的第三段代码改一下,

function foo() {
    var x = 1;
    if (x) {
        (function () {
            x = 2;
        }());
    }
    console.log(x);// 试试还是1么
} 

而在f()中对全局变量重新赋值不会影响到全局作用域。 楼主,你说的这句话是错的,在函数作用域中对全局变量重新赋值是会影响到全局作用域的。所以你给出的第一个例子的输出的a=1这个答案是错的,正确输出是a=2。


var a=1;
function f(){
    a=2;
}
f();
console.log(a);  //a=2;
//因为函数内没有声明局部变量,直接对变量进行赋值操作,所以会向window下寻找变量a再进行赋值操作
function f(){
    var a=1;
    if(a){
        a=2;
    }
}
f();
console.log(a);  //a is not defined
//这里的a都是局部变量,console.log(a)里要输出的是全局变量a,但是全局变量没有声明,所以报错
【热门文章】
【热门文章】