总结笔记:
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