JavaScript的with语句
ringa_lee
ringa_lee 2017-04-10 16:08:39
[JavaScript讨论组]


这个with语句的作用域是obj,所以var x = 20也就是将obj.x设置为20,但是我下面的var y = 30,不是给obj.y设置值吗?为什么外面反应的却是undefined?

ringa_lee
ringa_lee

ringa_lee

全部回复(2)
高洛峰

1)foo函数通过obj.foo方式调用时,with(this)中的this指向obj
2)声明过的变量,多次声明是无效的,也就是说

with(this){
    var x=20;
    var y=30;
    console.log(y);
}

等价于

//因为obj.x属性已经存在声明过了,其实就是一个赋值语句 obj.x=20;
//因为obj.y属性不存在,并且在with语句块中,不会主动obj中添加属性y,那么y变量只在with作用域中有效
with(this){
    x=20;
    var y=30;
    console.log(y);//输出 30
}

3) 如果代码这样写

with(this){
    x=20;
    y=30;
    console.log(y);
}

那么我们将发现y是一个全局变量

var obj={
    x:10,
    foo:function(){
        with(this){
            var x=20;
            y=30;
            console.log(y);
        }
    }
}

obj.foo();//30
console.log(obj.x);//20
console.log(obj.y);//undefined
console.log(y);//30
迷茫

obj没有定义y属性

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

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