文档中提到:
with 语句用于设置代码在特定对象中的作用域。
有人提到:
with语句将对象添加到当前作用域链的头部。
请问with具体应该如何理解呢?
经过测试:
var a = 123;
var b = {a : 321};
with(b){
console.log(a); // 321
}
var a = 123;
var b = {}; 这里去掉b中的a属性
with(b){
console.log(a); // 123
}
我的理解with语句中把对象b里面的属性的优先级高于该with所在作用域中其他同名变量。
w3school中也说道如果b中包含方法,则先回去找该方法是否是本地方法,然后再去b上找,没找到再去with所在作用域中,以此类推,如:
var escape = function(){
console.log(321)
}
var b = {a : '发生的了空间', escape : function(){console.log(123)}};
with(b){
escape(a)
}
没错,就是限定了命名空间;不用with(location);url的值就是www.segmentfault.com;用了with;url的值就是location.href;