javascript - 在局部作用域内对全局变量重新赋值会不会影响到全局作用域?
PHP中文网
PHP中文网 2017-04-11 09:48:18
[JavaScript讨论组]
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
} 
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(3)
迷茫

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

function foo() {
    var x = 1;
    if (x) {
        (function () {
            x = 2;
        }());
    }
    console.log(x);// 试试还是1么
} 
天蓬老师
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,但是全局变量没有声明,所以报错
怪我咯

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号