刚看了一篇文章《Rethinking JavaScript for-loops》,有点小收获。
我们常常这么写一个for循环:
- for(var i=0; i<arr.length; i++) {
- var each = arr[i];
- //do something
- }
一个简单的改进是将arr.length存储起来,这样可以减少对象属性的反复读取:
- for(var i=0,l=arr.length; i<l; i++) {
- var each = arr[i];
- //do something
- }
还可以将递增改为递减,当i递减到0时便可以触发循环的退出条件,这样就减少了一次运算(并没有减少)。像下面这样:
- for (var i=arr.length; i––;) {
- var each = arr[i];
- //do something
- }
这样循环造成的运算就只剩下一次了。
另外,如果能保证你的数组中没有0、false、null、”"这样的值,可以通过arr[arr.length+1]为undefined来退出循环:
- for (var i=0, each; each = arr[i]; i++) {
- //do something
- }
甚至是:
- for (var i=0, each; each = arr[i++];) {
- //do something
- }
当然,由于variable hoisting的存在,尽量不要把var放在for()语句中。
- var i;
- for (i=arr.length; i–– && each = arr[i];) {
- //do something
- }
-- Return null --