JS基础--with改变作用域

来源:互联网 发布:mmd怎么删除动作数据 编辑:程序博客网 时间:2024/06/05 15:33

with通常被当做重复引用同一对象中的多个属性的快捷方式。可以不需要重复引用对象本身。

一个例子引发的思考:

function foo(obj){with(obj){a=2;}}var o1={a:2}var o2={b:3}foo(o1);console.log(o1.a)//2foo(02);console.log(o2.a)//undefinedconsole.log(a)//2
我们可以注意到一个奇怪的副作用,a=2赋值操作实际上创建了一个全局变量a,

with可以将一个没有或有多个属性的对象处理为一个完全隔离的词法作用域,因此这个对象的属性也会被处理为定义在这个作用域中的标识符。

尽管with块可以将一个对象处理为词法作用域,但是这个块内部正常的var声明并不会被限制在这个块的作用域当中,而是被添加到with所处的函数作用域。

0 0