2015-04-14 2 views
-1

В последнее время я работаю над циклами и условностями. Я был довольно успешным в понимании концепций, но скобки продолжают меня путать. Без скобки в конце строки три и самой последней скобки внизу журнал вызовов не будет читать «Генератор № 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."); 
    } 
} 
+0

Выход идентичен в любом случае. Сравните [с скобками] (http://jsfiddle.net/qvt0j8jg/) и [без них] (http://jsfiddle.net/qvt0j8jg/1/). –

+0

Я не вижу скобок в строке 3. Строка 3 мне кажется полнойMW + = 62; –

+0

@BenjyKessler: Это потому, что строка 2 не была в блоке кода, поэтому строка 3 выглядела как строка 1. – Guffa

ответ

0

В этом случае эти скобки не имеют никакого значения.

Когда в цикле есть только один оператор (как он есть здесь), скобки не нужны.

for (a, b, c) d; 

делает точно так же, как:

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

Лично я всегда использую скобки, даже если есть только один оператор в блоке. Я думаю, что это упрощает чтение и обслуживание кода.

0

Для циклов и операторов if содержатся в фигурных скобках - это синтаксис.

Поэтому, если вы вставляете if, если внутри a for, каждый блок должен находиться внутри своего соответствующего блока.

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 
+2

Неправильно. Скобки не являются частью синтаксиса оператора 'if' или' for', они используются для группировки операторов. См. Синтаксис инструкции 'for': https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration#for_statement. Не требуется ни одна фигурная скобка в вашем примере. – Guffa

+0

Во-первых, очевидно, что номера строк были перепутаны в сообщении ОП, поэтому, возможно, мой ответ не был уместным, а во-вторых, у его сообщения есть фигурные скобки - его вопрос был не в том, мог ли он/мог использовать их. Кроме того, получайте удовольствие, минуя без них. – sesamechicken

+0

Его вопрос в том, почему был другой результат с и без брекетов (а это не так). В вашем ответе говорится, что всегда нужны брекеты, которых нет. – Guffa

0

Цикл for в javascript работает с фигурными скобками или без них.

for (...) { 
    //statement 
} 

такая же, как

for (...) 
    //statement 

Однако, это верно только для отдельных операторов ...

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

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

является не такой же, как

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

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

поскольку только первый if будет улавливаться циклом for, а другой, если будет проигнорирован до тех пор, пока цикл не завершится.

В вашем коде у вас есть специальный оператор if-then-else-if-then-else, и поэтому он попадает в цикл for.

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; 

только о 1 будет выполняться, если конд верно. Заявление 2 будет выполняться независимо, другими словами, это будет такой же, как:

if (cond) statement 1; 

statement 2; 

Использование скобок во всех случаях может быть хорошей привычкой, поскольку это предотвращает несчастные случаи, когда несколько операторов добавляются в состояние и т.д.

Смежные вопросы