为何不推荐使用with?

答:http://www.jb51.net/article/79474.htm工具

 

function funcWith() {性能

  console.time("funcWith");优化

  var obj = {spa

    a: [1, 2, 3].net

  };code

  with (obj) {htm

    for (var i = 0; i < 100000; i++) {对象

      var v = a[0];ci

    }it

  }

  console.timeEnd("funcWith");//88.260ms

}

funcWith();

这段代码将with语句做用到了obj对象上,而后直接使用a访问obj的a属性,按照前面说到的观点,访问a属性时,是一次性就能够在obj上找到该属性的,可是为何代码性能依旧下降了呢。 真正的缘由是:使用了with关键字后,JS引擎没法对这段代码进行优化。 JS引擎在代码执行以前有一个编译阶段,在不使用with关键字的时候,js引擎知道a是obj上的一个属性,它就能够静态分析代码来加强标识符的解析,从而优化了代码,所以代码执行的效率就提升了。使用了with关键字后,js引擎没法分辨出a变量是局部变量仍是obj的一个属性,所以,js引擎在遇到with关键字后,它就会对这段代码放弃优化,因此执行效率就下降了。 使用with关键字对性能的影响还有一点就是js压缩工具,它没法对这段代码进行压缩,这也是影响性能的一个因素。

相关文章
相关标签/搜索