for cycle和if语句

时间:2017-04-18 14:13:45

标签: javascript for-loop if-statement

我遇到了一些误会。有一个for循环,有一些if语句:

for (var number = 1; number < 100; number++) {
  if (number % 3 == 0 && number % 5 == 0)
    console.log(number + "fizzbuzz");
  if (number % 5 == 0)
    console.log(number + " buzz");
  if (number % 3 == 0)
    console.log(number + " fizz");
  else console.log(number);
}

此代码的输出为1,2,3个嘶嘶声,4个,5个嗡嗡声,等等。所以它是预期的。 但是如果我们删除大括号,输出将是这样的:

15fizzbuzz
30fizzbuzz
45fizzbuzz
60fizzbuzz
75fizzbuzz
90fizzbuzz
100 buzz
100

此外,该程序还有第二个实现(使用if-else语句):

for (var number = 1; number < 100; number++)
  if (number % 3 == 0 && number % 5 == 0)
    console.log(number + "fizzbuzz");
  else if (number % 5 == 0)
    console.log(number + "buzz");
  else if (number % 3 == 0)
    console.log(number + "fizz");
  else console.log(number);

请注意,没有大括号,但输出正常。 你能解释一下,区别的是什么?

3 个答案:

答案 0 :(得分:1)

正如很多评论指出的那样,你的第一个代码中缺少elses(或块)会导致它出错。

//a bit shortified to make it clearer
var a=true,b=true;
if(a && b){ }// will be executed
if(a){ } //will be executed
if(b){} //will be executed

//vs.
if(a&&b){}//will be executed
else if(a){}//else => not executed
else if(b){}//else => not executed

但是,重新构建代码可能更好,因为它非常重复:

for (var number = 1; number < 100; number++)
    console.log(number+ (number % 3 == 0?"fizz":"")+ (number % 5 == 0?"buzz":""));

所以记录号码,如果是3的倍数加“fizz”,如果是5的倍数加“buzz”......

答案 1 :(得分:1)

for循环的语法是for (statementA; statementB; statementC) statementD。语句可以与{}组合在一起,因此可以在需要单个语句的地方使用{statement, statement, ...}

for (var number = 1; number < 100; number++) {
  if (number % 3 == 0 && number % 5 == 0)
    console.log(number + "fizzbuzz");
  if (number % 5 == 0)
    console.log(number + " buzz");

在这种情况下,statementAvar number = 1statementBnumber < 100statementCnumber++statementD为{ {1}}。第二个if (number % 3 == 0 && number % 5 == 0) console.log(number + "fizzbuzz")是另一个不属于for循环的语句。如果您希望第二个if语句属于for循环,则需要使用if将语句组合在一起。

{}语句的语法为ifif (expression) statement。使用多个if (expression) else statement对齐,您可以将第一个语句传递给for循环,第二个语句将属于仍属于if else循环的第一个if。这就是为什么最后一个例子在没有for的情况下工作的原因。

重要的是要注意代码可能有用,但它仍然是错误的代码。建议使用{}{}forwhile下面的语句进行分组,即使它是单个语句。

在尝试理解JavaScript代码之前,您可能想学习JavaScript语法。 https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps

答案 2 :(得分:1)

当你错过分号或括号时,javascript会尝试将其自行插入,&amp;有时会产生一些奇怪的结果。 (规则是正确的,只有人和机器不同意如何处理它:D)

当您删除for循环的大括号时,javascript尝试将大括号放入代码和&amp;运行它,这与你期望它的行为方式不同,因此你感到困惑!

你写的什么&amp;读:

for (var number = 1; number < 100; number++)
  if (number % 3 == 0 && number % 5 == 0)
    console.log(number + "fizzbuzz");
  if (number % 5 == 0)
    console.log(number + " buzz");
  if (number % 3 == 0)
    console.log(number + " fizz");
  else console.log(number);

javascript对它做了什么&amp;执行:

for (var number = 1; number < 100; number++){ //runs loop here
  if (number % 3 == 0 && number % 5 == 0){
    console.log(number + "fizzbuzz"); //prints for first condition
  }
}

//now number is 100!

if (number % 5 == 0){
  console.log(number + " buzz"); //prints for second condition once cause 100%5==0 is true
}

if (number % 3 == 0){
  console.log(number + " fizz"); 
}
else{
  console.log(number); //prints for this else condition once cause 100%3==0 is false
}

这是完全有效的&amp;这里没有错误或错误!

这是因为如果在else之后没有立即if,那么javascript在那里终止该语句,但是如果你使用else...if那么它会继续该语句直到找到{{1}或else

后面的语句

如果您想使用此类行为,请使用Google Closure Compiler查看机器如何解释代码。

注意:正如@carcigenicate在评论中建议的那样,始终使用大括号!