Javascript中的FizzBu​​zz:代码根本不会执行或打印

时间:2014-11-25 15:18:35

标签: javascript fizzbuzz

一直在玩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);
    } 
}

我错过了什么?

2 个答案:

答案 0 :(得分: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版本会永远循环而不是根本不运行,因为{第一次测试真实性时,{1}}已经增加到1。

答案 1 :(得分:0)

我相信你只会混淆'for'和'while'循环的方式。你已经建立了'while',就像'for'一样!

这样想:当你写这样的while循环时:

while(i<100) {

你说, while(这种情况属实)。括号之间所需要的只是一个声明,以确定它是否真实。在循环的某个地方,你(通常)需要改变i的值,或者你(可能)得到一个无限循环。

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

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