JS for 循环的“优化”

今天在阅读angularjs 1.x源码的时候,发现作者写js的for循环时,往往采用的是定义两个变量的写法:

而我们在平常写到循环时,往往是使用的更为直观的方法

从逻辑和语法上来说,这两种方法完全等同。甚至angular作者的写法更有一种脱裤子放屁的多余感。

但是为什么实际上第一种方法才是更被推崇的呢?

原因是Array.length函数

(这里悄悄说下Array的prototype就是Array哦)并不是没有开销的。它每次都会重新去计算这个数组的长度。

因此在第二种写法中,每个循坏都会重新计算一次array的长度,从而造成了不必要的开销。

不过在一些现代的浏览器比如Chrome和Firefox中这两种写法是等同的,因为他们的js解释器会实际上把第二种写法转变为第一种来运行。

说了那么多实际上这个技巧对于比较小的数组来说并不会有太大的提升,并且现在大多数浏览器都是webkit内核,这两种写法会在运行时产生相同的结果。

真是没什么卵用的技巧(可以用来装B呀)。

参考:http://stackoverflow.com/questions/9592241/javascript-is-the-length-method-efficient

发表评论