技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> JavaScript --> javascript with延伸的作用域是只读的吗?

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

浏览:1624次  出处信息

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

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

建议继续学习:

  1. javascript的词法作用域    (阅读:3161)
  2. 有趣的变量作用域-PHP中global和Javascript中的var关键字    (阅读:2869)
  3. 闭包与作用域    (阅读:2825)
  4. 认识javascript中的作用域和上下文    (阅读:2514)
  5. javascript作用域和作用域链    (阅读:2411)
  6. JavaScript 函数、作用域和继承    (阅读:2263)
  7. 样式的作用域──页面重构中的模块化设计(一)    (阅读:2259)
  8. Javascript作用域原理    (阅读:2098)
  9. 从另外两道题说起    (阅读:1841)
  10. JavaScript的作用域和提升机制    (阅读:1787)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1