2016-10-11 4 views
8

Каковы преимущества использования петли while над контуром for? Когда я повторяю через массивы, я всегда использую цикл for, поэтому я подумал, не хватает ли я чего-то здесь.В то время как Loops vs. For Loops в JavaScript?

У меня никогда не было ситуации, когда петля for не выполняет эту работу, но я беспокоюсь, что, возможно, я нахожу здесь плохие привычки. Мое использование петель было в отношении элементов на веб-страницах, материал в анимации и т.д ..

ответ

19

Таковы причины, я бы выбрать один над другим:

Для контура Синтаксис:

for(int i = 0; i > 10; i++) 
{ 
    //Some code here 
} 

Я бы использовал цикл for по той причине, что я могу ЗНАТЬ ЧИСЛО ИТЕРАЦИЙ, которые мне нужно сделать, и у меня есть переменная INCREMENTING, которая иногда может быть удобной.

Хотя петля Синтаксис:

while(!done) 
{ 
    //Some code goes here 
} 

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

Do-While цикл Синтаксис:

do 
{ 
    //Some code here 
} 
while(!done); 

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

+1

Спасибо Rezwan, это отличный ответ. –

6

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

var arr = ["a", "b", "c"]; 
for (let i=0; i<arr.length; i++) { // will loop 3 times (length of arr = 3) 
    // do something 
} 

var x = "Hello"; 
while (x != "World") { 
    // do something 
    if (some_condition) { 
     // do something 
    } 
    else x = "World"; 
} 
6

Функционально можно заменить другое на всех условиях. Лучше другого? Не в javascript (который вы отметили) как его не скомпилированный язык.

Но в таких языках, как C++, цикл for обычно дает компилятору статический счетчик цикла, который компилятор может использовать для оптимизации двоичного файла. Поэтому он должен работать быстрее (при очень большом числе циклов).

Этого не должно быть беспокойство в сегодняшнем возрасте, когда вы даже не заметите увеличения производительности в цикле, работающем на 10000 итераций, на четырехъядерном процессоре емкостью 2,5 ГГц.

Однако, лично, эстетика имеет значение для меня (и это должно быть для вас, если вы серьезно относитесь к искусству кодирования). Например, когда вы имеете дело с внешним условием (переменная, которую вы проверяете, определяется вне цикла), переходите к циклу while. Его просто семантически так красиво. Также while цикл должен быть де-факто выбором для бесконечного цикла (я не вижу причины, почему у вас будет бесконечный цикл в javascript, хотя).

Вкратце, следуйте синтаксису.Вы просто проверяете состояние? Пойдите с петлей while. Вы инициализируете и увеличиваете/уменьшаете что-то в контексте цикла вместе с проверкой состояния? Только тогда перейдите в цикл for.

+0

Мне нравится последнее утверждение, по сути. – Ezeewei