0

一直在玩 FizzBu​​zz 问题,我想知道为什么下面的代码不会执行,没有任何东西打印到控制台。

var i = 0;
while (i = 0, i < 100, i++ ) {
    if ( i % 3 === 0) {
        console.log("Fizz");
    } else if ( i % 5 === 0) { 
        console.log("Buzz");
    } else {
        console.log(i);
    } 
}

我错过了什么?

4

2 回答 2

5

您使用了错误的循环结构。它应该是一个for,而不是while。另请注意,子句之间是分号,而不是逗号:

for (i=0; i < 100; i++) {

你有的是这样的:

while (i = 0, i < 100, i++) {

逗号只计算左侧,丢弃结果,然后计算右侧。因此设置i为 0(并丢弃赋值返回的零值),测试i小于 100 的值(但对比较返回的真实值不做任何事情),并使用最后一个表达式 ( i++) 的值作为循环的条件while。因为i是 0,这是假的,所以循环体永远不会执行。

请注意,如果您++i改用它,则情况不会有所不同for,但是您的while版本将永远循环而不是根本不运行,因为i在第一次测试真实性时已经将其增加到 1。

于 2014-11-25T15:20:05.983 回答
0

我相信您只是混淆了制作“for”和“while”循环的方式。你已经建立了你的'while',就像你想要一个'for'!

可以这样想:当您编写这样的 while 循环时:

while(i<100) {

你是说,while (this condition is true)。括号之间只需要一个声明来确定它是否正确。在循环中的某个地方,您(通常)需要更改 i 的值,或者您(可能)会得到一个无限循环。

现在,对于 for 循环,我们需要括号之间的更多信息……我们需要确定我们将采用的循环数量的所有信息。就像你在那里写的一样,我们正在写for(当我的变量等于这个时;循环直到这个条件为真;像这样更改变量)。

通常,这意味着“while”在您确定循环逻辑的方式上提供了更大的灵活性,但“for”循环可能是最容易阅读的。

于 2014-11-25T15:34:30.653 回答