with和catch改变作用域链

总结笔记:

with和catch会将对象中标识符的解析添加到作用域链的最前端,

标识符的解析就是with()和catch()括号中的对象。

var x = 10, y = 10;

with ({x: 20}) {
//作用域链:对象{x: 20}  ---->   global(var x=10, y=10)

var x = 30, y = 30; 
//这时候会改变作用域链中的值,var x=30先沿着作用域找到在对象{x:20}中的x,
//然后x的值改变为30,var y=30先沿着作用域链找到global的y值,将其改为30   

  alert(x); // 30

  alert(y); // 30
 

}
//with语句执行完之后,对象标识符的解析(在括号中的对象{x:20})将会被销毁

alert(x); // 10
alert(y); // 30

  

 

with也是一个对象,含有__proto__属性,指向Object.prototype

 

 

  

posted @ 2016-11-19 16:52  FatDong  阅读(378)  评论(0编辑  收藏  举报