FizzBuzz代码中count++在else语句内无效,移至外部正常的原因?
FizzBuzz中count++位置问题解析
问题代码
var output = []; var count = 1; function fizzBuzz() { if (count % 5 === 0 && count % 3 === 0) { output.push("FizzBuzz"); } else if (count % 5 === 0) { output.push("Buzz"); } else if (count % 3 === 0) { output.push("Fizz"); } else { output.push(count++); } // count++;// console.log(output); }
问题描述
count++写在else语句中无法正常工作,但将其移至else语句外部则可正常运行,请问这是什么原因?
原因解析
- 当
count能被3或5整除时(比如3、5、15这类数),代码会进入前三个条件分支(if/else if),此时else分支里的count++完全不会执行。这就导致count的值一直停留在当前数,下次调用fizzBuzz()时,还是判断同一个count,无限重复添加对应的Fizz/Buzz/FizzBuzz,永远无法处理下一个数。 - 把
count++移到所有条件分支外面后,不管进入哪个分支,每次调用fizzBuzz()都会执行count++,count的值每次都会递增,这样就能依次处理1、2、3...每个数字,程序自然能正常运行。
举个具体例子:
- 若
count++在else里:当count=3时,进入第三个分支push"Fizz",但count还是3;下次调用函数时,依然判断count=3,再次push"Fizz",循环往复,output数组会被无限添加"Fizz"。 - 若
count++在外部:当count=3时,push"Fizz"后执行count++,count变成4;下次调用就会处理4,程序按预期推进。
内容的提问来源于stack exchange,提问作者Omer Karatas
相关产品推荐
相关产品推荐

