我 "solved" FizzBu​​zz,但我不明白它为什么起作用

I "solved" FizzBuzz, but I don't understand why it's working

我完全绿了。刚开始阅读 Eloquent JavaScript,第 2 章有一些练习。

显然 "FizzBuzz" 问题不需要介绍。我花了一个小时的大部分时间来诚实地尝试不同的方法。

终于找到了一个不太eloquent的解决方案。但是当我看着它时,我不明白它是如何工作的:

var x = 1
while (x <= 20){
  if (x % 5 == 0 && x % 5 == 0){
    console.log("FizzBuzz");
  }
  else if (x % 5 == 0){
    console.log("Buzz");
  }
  else if (x % 3 == 0){
    console.log("Fizz");
  }
  else
    console.log(x);
    x++;
}

因此,根据我目前的理解:我希望此脚本在第一个 "Fizz" 中计数为 3,然后陷入无限循环。

显然我理解错了。脚本如何从这里移动到“4”?

感谢阅读。

如果格式正确,它就会很明显。

var x = 1
while (x <= 20){
  if (x % 5 == 0 && x % 3 == 0){
    console.log("FizzBuzz");
  }
  else if (x % 5 == 0){
    console.log("Buzz");
  }
  else if (x % 3 == 0){
    console.log("Fizz");
  }
  else
    console.log(x);
  x++;
}

也就是说,x++独立于条件语句执行,因为else子句没有大括号,所以它只考虑一个语句(即console.log

我还更正了您在第一个条件中遇到的错误(您检查了两次 x%5 而不是检查 x%3)。

因为else没有括号,所以只执行后面的一条命令。所以 x++ 在每次迭代时都会执行。

顺便说一下,您应该将 if (x % 5 == 0 && x % 5 == 0) 更改为 if (x % 3 == 0 && x % 5 == 0)