首页 > JavaScript > javascript with延伸的作用域是只读的吗?
2011三月2

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);
})();

文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2011/03/02/2018/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

3 Responses to “javascript with延伸的作用域是只读的吗?”

  1. #1 远走高飞 回复 | 引用 Post:2011-03-03 21:28

    前来学习下了

    [回复]

  2. #2 alswl 回复 | 引用 Post:2011-03-05 22:28

    A: 写入成功了

    [回复]

  3. #3 simaopig 回复 | 引用 Post:2011-03-07 09:46

    @alswl
    :) 可能是我没有理解作者原话中想表达的意思吧。。 :lol:

    [回复]

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)