0

我在 CodeAcademy 工作,试图学习一些 JavaScript,实际上我遇到了这个有趣的事情。请看这里:

for(var counter = 100; counter > 0; counter = counter - 5){
    console.log(counter);
}

在这里,我告诉循环循环打印计数器编号,只要计数器大于 0,但它最终只会将 100..95..90 等打印到 5。我知道如何解决这个问题,只需在大于号之后添加一个简单的等号。像这样:

for(var counter = 100; counter >= 0; counter = counter - 5){
    console.log(counter);
}

但我很想知道为什么这不起作用?我的意思是它以 5 结束输出,5 大于 0,不是吗?当我在大于号之前放置一个等号时,它确实应该输出一些未定义的数字,因为即使计数器等于 0,它也应该循环。我的头因此而受伤。谁能解释一下,谢谢:)

4

3 回答 3

2

不,一旦达到零,它就不应该继续循环。for 循环的工作方式是这样的:

for (initialization; condition; increment) {
    body;
}

它按以下顺序执行这些操作:

initialization
loop {
    condition true? then:
        body
        increment
    else:
        stop loop
}

因此,当计数器达到零时,条件为假,并且计数器的值为“0”时不会执行主体,它将简单地停止。但是,当您输入 >= 时,此时条件仍然为真。

于 2013-03-04T21:59:02.987 回答
2

“for”循环的英文翻译是:

  1. 将计数器设置为 100
  2. 如果 counter > 0 不为真,则结束此块
  3. 运行此代码块(在本例中为日志计数器)
  4. 将计数器减少 5
  5. 返回第 2 步

因此,在这种情况下,如果计数器为零,则它不 > 0,因此代码不会返回到步骤 2。而在第二种情况下,它 >= 0,因此它最后一次运行。

于 2013-03-04T21:59:37.963 回答
1

让我们看看这里发生了什么,

当你说counter > 0时,它应该继续直到它严格大于零。由于零不大于自身,因此循环在 5 处停止。

然后,当您将表达式更改为 时counter>=0,它会告诉编译器继续直到计数器大于或等于零,因此它也会继续打印零。

于 2013-03-04T22:00:25.557 回答