with
with加一个对象参数 会把这个对象当做with圈定代码体作用域的最顶端,会改变作用域
字符串参数 ?
就是把参数对象作为AO对象(执行期上下文)
改变作用域 会改变作用域链 系统内核会消耗大量的效率去改变作用域链 程序会变的非常慢的
es5 为了提升效率 禁用了with (在严格模式下)
var obj = {
name:"obj"
}
var name = "window";
var ff= "window_ff";
function test(){
var name = "test";
var age = 'testage'
with(obj){
console.log(name);// 'obj'
console.log(age);// 'testage'
console.log(ff);// "window_ff"
}
}
test()
document
with(document){
write('document with')
}
作用 简化代码
var obj = {
dep1:{
name:{
handle:{
name:"fff",
age:18
}
}
},
dep2:{...}
}
// 直接访问handle属性
with(obj.dep1.name.handle){
console.log(name) // 'fff'
}