这是因为 with() 语句将会在作用域链的开始添加额外的变量。

    额外的变量意味着,当任何变量需要被访问的时候,JavaScript引擎都需要先扫描with()语句产生的变量,然后才是局部变量,最后是全局变量。

    因此with()语句同时给局部变量和全局变量的性能带来负面影响,最终使我们优化JavaScript性能的计划破产。

    和函数类似 ,with语句会创建自己的作用域,因此会增加其中执行的代码的作用域链的长度,由于额外的作用域链的查找,在with语句中执行的代码肯定会比外面执行的代码要慢,在能不使用with语句的时候尽量不要使用with语句。

    1. with (a.b.c.d) {
    2. property1 = 1;
    3. property2 = 2;
    4. }
    5. //可以替换为:
    6. var obj = a.b.c.d;
    7. obj.property1 = 1;
    8. obj.property2 = 2;