日期:2014-05-16  浏览次数:20319 次

[转]javascript with延伸的作用域是只读的吗?

?

当执行流进入下列任何一个语句时,作用域链将得到延长:

* 1) try-catch语句的catch块
* 2) with语句

此两个语句会在作用域链的前端添加一个变量对象。对with来说,其变量对象中包含着指定对象的所有属性和方法所作的变量申明;对catch来说, 其变量对象中包含的是被抛出的错误对象的申明。这些标量对象都是只读的,因此在with和catch语句中申明的变量都会被添加到所在执行环境的变量对象 中。

这是《JavaScript 高级程序设计第二版》中说明的一句话。可是,with延伸的作用域,标量对象真的是只读的吗?还是我理解的这个标量的意义不对?

不瞎说了,把自己的测试代码发一下就可:

//会跳转
( function ( ) {
? ? with ( location) {
? ? ? ? href= 'http://www.360.cn' ;
? ? }
} ) ( ) ;


// b
( function ( ) {
? ? var obj = { a: 'a' } ;

? ? with ( obj) {
? ? ? ? a = 'b' ;
? ? }

? ? alert ( obj.a ) ;
} ) ( ) ;

原文地址:http://www.xiaoxiaozi.com/2011/03/02/2018/