Javascript for循环奇怪行为

时间:2017-07-18 05:16:32

标签: javascript for-loop firefox

您好在mozilla firefox 53.0中使用javascript并在for循环中找到了这个

案例1:对于sintaxis导致无限循环和浏览器崩溃。

 for(var i=0;i<array.length;i+2)
        {
            console.log(array[i]);
            console.log(array[i+1]);
            console.log(array[i+2]);
        }

案例2:正常循环行为。

for(var i=0;i<array.length;i=i+2)
        {
            console.log(array[i]);
            console.log(array[i+1]);
            console.log(array[i+2]);
        }

这两种语法都正确吗?什么可以产生无限循环? 从console.log(数组)中提取的数组 数组[&#34; Dieguez Jorge Alberto&#34;,&#34; Cel。:(02244)453125&#34;,&#34; jdieguez56@gmail.com" ]

3 个答案:

答案 0 :(得分:1)

JavaScript(以及Java和许多其他语言)中的for循环具有以下一般语法:

for (<loop variable; init>; <criteria check>; <change to loop variable>)

如果不确切,请原谅我。在你的第一个循环中:

for (var i=0; i < array.length; i+2)

你告诉JavaScript在每次循环迭代结束时计算i+2。但是,您永远不会将此值分配回循环计数器i。因此,循环继续无限迭代,i具有零值。但是,在以下循环中:

for (var i=0; i < array.length; i=i+2)

您要将i+2分配给i。这意味着i在循环的每次迭代期间增长2,并且当i达到数组长度的大小时,循环最终将终止。

<强>更新

根据您的评论,您认为i + 2会根据i++这样做而增加和分配,而不使用显式的等号。但是,i++实际上是i = i + 1的简写,因此实际上正在进行分配。但是i + 2不是一个赋值,它只是一个表达式,因此你的循环会永远存在。

答案 1 :(得分:0)

在第一个循环中,您不会重新分配变量ii + 2只是一个声明,永远不会改变i的价值。

由于这个原因,永远不会遇到i < array.length的循环退出条件,循环永远不会退出。

答案 2 :(得分:0)

在第一个循环中你没有重新分配变量i,如果你想它必须像这样

  

i + = 2等于i = i + 2

如果你只运行i + 2它的just语句而不是改变variabel i的值。所以我永远不会增加。也许你可以看到控制台只是打印静态但总是循环。因为我永远不会停止,因为我永远不会达到数组的长度。所以,你必须让我为for-loop打破。