再次麻烦括号

时间:2015-04-14 22:28:52

标签: javascript

我最近一直在研究循环和条件。我在理解这些概念方面非常成功,但括号继续让我感到困惑。如果没有第三行末尾的括号,以及底部的最后一个括号,则通话记录将不会显示“发电机#1已关闭”。喜欢它。为什么这些括号会产生如此大的差异?

var totalGen = 19;
var totalMW = 0;
for (var genNumber = 1; genNumber <= totalGen; genNumber++){
  if (genNumber <= 4 && genNumber % 2 == 0) {
    totalMW += 62;
   console.log("Generator #" + genNumber + " is on, adding 62 MW, for a total                 of " + totalMW + " MW!");
  }
  else if (genNumber >= 5 && genNumber % 2 == 0) {
    totalMW += 124;
    console.log("Generator #" + genNumber + " is on, adding 124 MW, for a     total of " + totalMW + " MW!");
  }
    else {
      console.log("Generator #" + genNumber + " is off.");
    }
}

4 个答案:

答案 0 :(得分:1)

您需要将其视为语句或语句组。如果您只有一个语句,则不需要大括号。

例如:

for(...) statement;
if (cond1) statement;
else if (cond2) statement;

声明可以是一行。但是,如果您需要多个语句,则需要使用大括号对它们进行分组:

for(...) {
    statement 1;
    statement 2;
    etc..
}

if (cond1) statement;  // single line
else if (cond2) {      // group, only executed if cond2 is true
    statement 1;
    statement 2;
}
else                  // single line
    statement;

这样浏览器就会知道所有这些语句都属于一个步骤。

如果你这样做了:

if (cond)
    statement 1;
    statement 2;

如果cond为true,则只执行语句1。语句2将被执行,换句话说,它将与:

相同
if (cond) statement 1;

statement 2;

在所有情况下使用括号都是一个好习惯,因为它可以防止在条件等中添加多个语句的事故。

答案 1 :(得分:0)

在这种情况下,这些括号根本没有任何区别。

当循环中只有一个语句时(就像这里一样),不需要括号。

for (a, b, c) d;

完全相同:

for (a, b, c) { d; }

我个人总是使用括号,即使块中只有一个语句。我认为它使代码更易于阅读和维护。

答案 2 :(得分:0)

For循环和if语句包含在花括号中 - 这就是语法。

因此,如果在for中嵌入if,则每个块必须位于其各自的块内。

if(something){
    return;
 }

for(i=0; i<10; i++){// open curly for the for
      if(i == 4){//curly for the if
          console.log('i is 4!');
      }//end curly for the if
 }//end curly for the for

答案 3 :(得分:0)

javascript中的for循环可以使用或不使用大括号。

for (...) {
    //statement
}

相同
for (...)
    //statement

但是,这仅适用于单个陈述......

for (...) {
    if (...) {
        //A
    }

    if (....) {
        //B
    }
}

相同
for (...)
    if (...) {
        //A
    }

    if (....) {
        //B
    }

因为只有第一个if将被for循环捕获,另一个if将被忽略,直到循环结束。

在你的代码中,你有一个单一的if-then-else-if-then-else语句,所以它被for循环捕获。