在
this网站有一个循环变化的列表.我可以理解for(var i = 0,len = arr.length; i
用法,因为arr.length不是在每个步骤中计算似乎是一个边际性能增益.然而,使用其他变体的优点是什么?例如,循环如=""
> for(var i = arr.length; i–;)
> for(var i = 0,each; each = arr [i]; i)
> for(var i = arr.length; i–;)
> for(var i = 0,each; each = arr [i]; i)
使用不同的循环变化,性能是否有明显的变化?我通常用于(var i = 0,len = arr.length; i
被广泛认为是反向while循环
var loop = arr.length; while( loop-- ) { }
是C类语言中最快的循环类型(这也适用于ECMAscript一段时间,但是我认为所有最新的引擎甚至在今天的标准循环中也是如此). (jsperf)
你的’变体’实际上没有变化,只是在for循环中使用条件语句(实际上使它变成一个变量).喜欢
1)for(var i = arr.length; i–;)
只需使用for循环中的条件部分来进行两者,迭代和检查,如果我有一个真值.一旦我变为0,循环就会结束.
2)for(var i = 0,each; each = arr [i]; i)
这里我们从每个迭代中获取元素,所以我们可以在循环体内直接访问它.当你厌倦了总是重复arr [n]时,这是常用的.
在循环之前缓存.length属性的效果很好.正如你正确地提到的,它更快,因为我们不必在每次迭代中访问该属性.除此之外,在处理像HTMLCollections这样的“活动结构”时,还需要在DOM脚本中.
相关文章
转载注明原文:对于JavaScript中的循环变体 - 代码日志
解决方法
被广泛认为是反向while循环
var loop = arr.length; while( loop-- ) { }
是C类语言中最快的循环类型(这也适用于ECMAscript一段时间,但是我认为所有最新的引擎甚至在今天的标准循环中也是如此). (jsperf)
你的’变体’实际上没有变化,只是在for循环中使用条件语句(实际上使它变成一个变量).喜欢
1)for(var i = arr.length; i–;)
只需使用for循环中的条件部分来进行两者,循环就会结束.
2)for(var i = 0,each; each = arr [i]; i)
这里我们从每个迭代中获取元素,这是常用的.