Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谁能给我解释一下这两个循环的区别吗?_Javascript - Fatal编程技术网

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
  • 根据jsref,它说第一个更快。为什么?
  • 有谁能解释一下,与传统的方式相比,for-loop做了什么

  • 您的第一个示例只是做了一些非常不同的事情。请查看:

    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;
    }