深入理解JavaScript学习笔记—代码优化之for循环(for Loops)

1.通常的循环形式

for(var i=0;i<myarray.length;i++)
{
//使用myarray[i]做点什么
}

弊端:

     1.每次循环都要获取一下myarray的长度
     2.如果myarray是一个HTMLCollection对象(DOM方法返回的对象),如:
                 - document.getElementsByName()
                 - document.getElementsByClassName()
                 - document.getElementsByTagName()
                  还有其他一些HTMLCollections,这些是在DOM标准之前引进并且现在还在使用的。有:
                  - document.images: 页面上所有的图片元素
                 - document.links : 所有a标签元素
                 - document.forms : 所有表单
                 - document.forms[0].elements : 页面上第一个表单中的所有域
                 则会每次实时查询DOM,降低代码的性能。

2.优化一——缓存数组

for(var i=0,max=myarray.length;i<max;i++)
{
//使用myarray[i]做点什么
}

3.优化二——单var形式

function looper() {
   var i = 0,
        max,
        myarray = [];
   // ...
   for (i = 0, max = myarray.length; i < max; i++) {
      // 使用myarray[i]做点什么
   }
}

4.优化三——i++

最后一个需要对循环进行调整的是使用下面表达式之一来替换i++。

i = i + 1
i += 1

JSLint提示您这样做,原因是++和–-促进了“过分棘手(excessive trickiness)”。
如果你直接无视它,JSLint的plusplus选项会是false(默认是default)。

还有两种变化的形式,其又有了些微改进,因为:

少了一个变量(无max)
向下数到0,通常更快,因为和0做比较要比和数组长度或是其他不是0的东西作比较更有效率

//第一种变化的形式:

var i, myarray = [];
for (i = myarray.length; i–-;) {
   // 使用myarray[i]做点什么
}

//第二种使用while循环:

var myarray = [],
    i = myarray.length;
while (i–-) {
   // 使用myarray[i]做点什么
}

这些小的改进只体现在性能上,此外JSLint会对使用i–-加以抱怨。

本文摘录整理自:深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点

猜你喜欢

转载自blog.csdn.net/yangyuqingabc/article/details/80778703