作者:LAMP小白 点击:1983 发布日期: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