2014-08-27 4 views
2

Долгосрочный lurker, первый раз постер. Я не понимаю, почему эта функция работает как While-Loop, но не как For-Loop. Я пытаюсь подсчитать до 10 и печатать на консоли на каждой итерации.While & For-Loops

While-Loop:

function oneToTenW() { 
    var x = 0; 
    while(x < 10) { 
    x++; 
    console.log ("x is equal to " + x); 
    } 
} 

For-Loop:

function oneToTenF() { 
    for(var x = 0; x < 10; x++); 
    console.log ("x is equal to " + x); 
} 

Когда я называю While-Loop, я получаю это:

oneToTen(); 
x is equal to 1 
x is equal to 2 
x is equal to 3 
x is equal to 4 
x is equal to 5 
x is equal to 6 
x is equal to 7 
x is equal to 8 
x is equal to 9 
x is equal to 10 

В то время, когда я называю For-Loop, я получаю это:

oneToTenf(); 
x is equal to 10 

Любые мысли?

+1

Возможно, точка с запятой позади? – Trudbert

+0

как говорит @ Трудберт, просто используйте скобки для получения итераций –

+1

Я не думаю, что это опечатка, я думаю, что это неверное утверждение о том, где ';' продолжается 'для' циклов. Есть разница. –

ответ

5

Потому что у вас есть дополнительные точки с запятой

function oneToTenF() { 
    for(var x = 0; x < 10; x++); 
    // Here -------------------^ 
    console.log ("x is equal to " + x); 
} 

Таким образом, тело цикла состоит полностью из пустого оператора (;). Когда он завершится, линия console.log начнет показывать текущее значение x, которое теперь составляет 10.

Чтобы поставить console.log линию в теле цикла, технически все, что вам нужно сделать, это удалить ;:

function oneToTenF() { 
    for(var x = 0; x < 10; x++) 
    console.log ("x is equal to " + x); 
} 

... хотя я всегда использую блок ({}) на управляющих структурах:

function oneToTenF() { 
    for(var x = 0; x < 10; x++) { 
    console.log ("x is equal to " + x); 
    } 
} 

Любой из тех, кто покажет вам значение 0 через 9, поскольку for цикла работает следующим образом:

  1. ли инициализация (x = 0)
  2. Do тело цикла
  3. ли приращение (x++)
  4. ли тест (x < 10)
  5. Если тест верно, то возврат к шагу 2
+0

Отличное объяснение. Хорошая прогулка в For-Loop. Спасибо T.J. – Padawan

7

Эта линия прямо здесь:

for(var x = 0; x < 10; x++); 

Поскольку у вас есть точка с запятой в конце, инструкция эффективно завершается там, и цикл выполняется без каких-либо действий. Для того, чтобы иметь цикл выполнить инструкцию ниже его, вам необходимо включить это заявление в теле цикла, удаляя точку с запятой:

for(var x = 0; x < 10; x++) 
    console.log ("x is equal to " + x); // <- the line immediately after the for statement will be executed on every iteration 

Или заключая заявление или заявления должны быть выполнены в блоке (фигурные скобки):

for(var x = 0; x < 10; x++) { 
    console.log ("x is equal to " + x); 
} 

Теперь инструкция будет выполняться каждый раз, когда цикл повторяется.

6

У вас есть точка с запятой после цикла for, так что она ничего не зацикливается. Попробуйте удалить эту точку с запятой и, возможно, добавить некоторые скобки, как вы делали с циклом while.

0

вы теряете тело для цикла

function oneToTenF() { 
    for(var x = 0; x < 10; x++) { 
    console.log ("x is equal to " + x); 
    } 
} 
+0

Технически тело петли не пропало. Это просто утверждение, которое не делает то, что хочет OP. Но ваше решение, конечно, правильно. :-) –

2

Это потому, что вы положили ; в конце for линии:

for(var x = 0; x < 10; x++); 

Это кладёт пустое заявление, как тело петля for и оператор console.log() запускается после петля заканчивается.

Оно должно быть:

for(var x = 0; x < 10; x++) { 
    console.log ("x is equal to " + x); 
} 
2

Потому что у вас есть дополнительные точки с запятой. Попробуйте менее одного

function oneToTenF() { 
    for(var x = 0; x < 10; x++){ 
    console.log ("x is equal to " + x); 
} 
} 
1

Как другие говорили, но я скажу так или иначе,

function oneToTenF() { 
    for(var x = 0; x < 10; x++); < Issue is right there. 
    console.log ("x is equal to " + x); 
} 

Если вы сделаете это

function oneToTenF() { 
    for(var x = 0; x < 10; x++){ 
    console.log ("x is equal to " + x); 
    } 
} 

, то это даст вам результат, который вы хотели , Брекеты и точки с запятой.

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