with语句的本质

通过测试及debug后, 得出结论, 仅代表个人意见:

with的本质, 就是构造一个作用域, 将with的对象的所有key, 声明为局部变量




var inner = '123';
var outer = {inner : 'hello world', another: 'hello with'};
window.obj = {outer: outer};

with(outer) {
alert(inner);
alert(another);
alert(outer.inner);
alert(window.obj.outer.inner);
show();
}


function show() {
alert(inner);

}


等同于以下代码



var inner = '123';
var outer = {inner : 'hello world', another: 'hello with'};
window.obj = {outer: outer};

(function(inner, another) {
alert(inner);
alert(another);
alert(outer.inner);
alert(window.obj.outer.inner);
show();
})(outer.inner, outer.another);


function show() {
alert(inner);

}




再看看下面这个常见的问题, 一目了然
[code]
var root = {
branch: {
node: 1
}
};

with(root.branch) {
root.branch = {
node: 0
};
// 显示 1, 错误!
alert(node);
}
// 显示 0, 正确!
alert(root.branch.node);
[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值