Javascript for循环显示比预期更多的结果

时间:2016-03-28 11:28:18

标签: javascript for-loop increment

运行下面的代码时,document.write中的文本运行8次,而不是我预期的7次。

如果我理解正确,增加2应该显示位置:
20+2, 22+2, 24+2, 26+2, 28+2, 30+2 and 32+2

根据我得到的结果,我假设它也显示34 + 2,即36。我缺少什么?谢谢。

 x = 20;
 for (x = 20; x < 35; x += 2) {
   document.write("How many times will this loop execute?" + "<br/>");
 };

6 个答案:

答案 0 :(得分:2)

如上面的评论所述,循环运行8次是正确的。由于没有人说明原因,因此:x+=2发生在循环的 end ,而不是在开头。因此循环将运行20,22,24,26,28,30,32和34。

答案 1 :(得分:0)

您误解了for loop的工作原理。

  

for([initialization]; [condition]; [final-expression])

     

final-expression:在每个循环迭代结束时要评估的表达式。这发生在下一次条件评估之前。通常用于更新或增加计数器变量。

因此,您的计数器会在循环结束时递增,并且观察到的行为是正确的。循环执行20,22,24,26,28,30,32和34。

答案 2 :(得分:0)

它会运行8次,x遍历20到34之间的每个偶数。如果有帮助,你可以这样写:

var x = 20;
while (x <= 34) {
    // do something
    x += 2;
}

但是,请务必注意,在循环运行后(无论您使用的是for还是while版本),x将等于36,因为它会增加在它最终未通过测试之前;在循环内部,x永远不会等于36.就最佳实践而言,你应该只在循环中使用像x这样的计数器变量;这可以通过使用ES6 let关键字(块范围)来强制执行(该示例只打印出x值列表作为DOM元素:

function appendSpanCounter(i, end) {
    let el = document.createElement("span"),
        content = i.toString(10);

    if (i < end) content += ", ";

    (typeof el.textContent === "string") // ternary operator
        ? el.textContent = content
        : el.innerText = content;

    (document.body || document.querySelector("body")).appendChild(el);
}

for (let x = 20; x <= 34; x += 2) {
    appendSpanCounter(x, 34);
}
// x is now undefined here

答案 3 :(得分:0)

当开始循环时,将+ +添加到x,如下所示:

 x = 20;
 for (x = 20+2; x<35; x+=2) {
        document.write("How many times will this loop execute?" + "<br/>");
    };

fiddle

答案 4 :(得分:0)

<强>脚本:

x = 20;
count = 1;
for (x = 20; x < 35; x += 2){
  document.write("Execution: "+ (count++)+ "<br/>");
};

<强>输出

循环执行总共8次。

Execution: 1
Execution: 2
Execution: 3
Execution: 4
Execution: 5
Execution: 6
Execution: 7
Execution: 8

jsfiddle link结帐。

答案 5 :(得分:0)

是的,正在执行8次,因为在2 x 2中是20到35

x = 20;
for (x = 20; x < 35; x += 2) {
  document.write("Execute for " + x + " " + "<br/>");
};

/*
OUTPUT:

Execute for 20 
Execute for 22 
Execute for 24 
Execute for 26 
Execute for 28 
Execute for 30 
Execute for 32 
Execute for 34 
*/

如果您想要7次,则可以更改为 34

 x = 20;
 for (x = 20; x < 34; x += 2) {
   document.write("Execute for " + x + " " + "<br/>");
 };