Javascript 谁能给我解释一下这两个循环的区别吗?
和Javascript 谁能给我解释一下这两个循环的区别吗?,javascript,Javascript,和 for (var i = 0, len = a.length; i < len; i++) { newArray.push( a[i] ); } for(变量i=0,len=a.length;i
for (var i = 0, len = a.length; i < len; i++) {
newArray.push(
a[i]
);
}
for(变量i=0,len=a.length;i
您的第一个示例只是做了一些非常不同的事情。请查看:
var a = [1,2,3,4],
newArray = [];
for (var b = a[0], len = a.length; len; b = a[--len]) {
newArray.push(b);
}
> newArray
[1, 4, 3, 2]
您的第二个示例将产生预期的[1、2、3、4]
如果需要了解算法,将
for
-表示法转换为while循环并展开减量和增量运算符时可能会更容易:
/* first example */
var b = a[0],
len = a.length;
while (len) {
newArray.push(b);
len = len-1;
b = a[len];
}
/* second example */
var i = 0,
len = a.length;
while (i < len) {
newArray.push( a[i] );
i = i+1;
}
/*第一个示例*/
var b=a[0],
len=a.长度;
while(len){
newArray.push(b);
len=len-1;
b=a[len];
}
/*第二个例子*/
var i=0,
len=a.长度;
而(我
我认为第一个循环的主要好处是a
被缓存在len
中,然后用作单个布尔值:通过简化循环条件可以获得一点时间。然而!它不会产生与输出相同的数组
假设在[0,1,2,3,4,5,6,7,8,9]中有十个元素——循环将首先处理[0],然后处理[--len],在我们的示例中,这是[9]。最终结果将是newArray=[0,9,8,7,6,5,4,3,2,1]
所以它为什么更快并不重要,因为它做了错误的事情 @Arpit:你看过这篇文章了吗。@凯文:很有趣,我从来没见过第一个模型。希望在这里也能学到一些东西。好的,让我检查一下。我只考虑了页面代码:)嗯,测试结果真的很有趣。在这里测试的是w/FF19,第一个更快(约6.9%),下划线最慢。可能更快是因为缓存了长度,而不是因为长度相反。但这是一个不同的循环。你的意思是,如果已知长度,那么即使它向前运行,循环也会更快@Arpit:这将取决于阵列和引擎应用的优化。
/* first example */
var b = a[0],
len = a.length;
while (len) {
newArray.push(b);
len = len-1;
b = a[len];
}
/* second example */
var i = 0,
len = a.length;
while (i < len) {
newArray.push( a[i] );
i = i+1;
}