for循环的艺术

for循环的艺术

作者:LAMP小白  点击:1851  发布日期:2012-12-31 16:33:00  返回列表

for循环经常用在遍历数组或类数组对象,如引数(arguments)和HTML容器(HTML Colltion)对象,通常的for循环模式如下:

mio_lt;scriptmio_gt;
    var arr = [ 1, 2, 3, 4, 5, 6, 7, 8];
    for ( var i = 0; i mio_lt; arr.length; i++ ) {
        console.log(arr[i]);
    }
mio_lt;/scriptmio_gt;



这种模式的问题在于每次循环迭代时都要访问数据的长度,这样会使代码变慢,特别是arr不是数据而是HTML容器时

容器的麻烦在于他们在document下是活动的查询,也就是说,每次访问任何容易的长度时,也就是在查询活动的DOM,而这是非常耗时的


这就是为什么好的for循环是将已经遍历过的数组(或容器)的长度缓存起来


mio_lt;scriptmio_gt;
    var arr = [ 1, 2, 3, 4, 5, 6, 7, 8];
    for ( var i = 0, len = arr.length; i mio_lt; len; i++ ) {
        console.log(arr[i]);
    }
mio_lt;/scriptmio_gt;



这种方式下,对长度的值只提取一次,但应用在整个循环之中

在所有浏览器中,通过将HTML容器需要遍历的次数缓存起来都会大大提高速度,类似于计数表的作用


//还有一点就是使用++ -- 替代 i = i + 1;或i++

//因为 ++i 更快 少了一次变量复制,不过这里不能使用,得换个实现方式


for模式引出了两个细微的操作

1.使用最少的变量

2.逐步减至0,这样通常更快,因为同0比较比同数组的长度比较更快

mio_lt;scriptmio_gt;
    var i, arr = [ 1, 2, 3, 4, 5, 6, 7, 8];
    for ( i = arr.length; i--; ) {
        console.log(arr[i]);
    }
mio_lt;/scriptmio_gt;



还可以使用while

mio_lt;scriptmio_gt;
    var arr = [ 1, 2, 3, 4, 5, 6, 7, 8],
        i   = arr.length;
    while ( i-- ) {
        console.log(arr[i]);
    }
mio_lt;/scriptmio_gt;




上一篇:单一var模式(Single Var Pattern) 下一篇:快递查询API
0