JavaScript

Сравниваю циклы while и for и хочу понять разницу между ними. Они выполняют условно одно и тоже. Это вся разница?

Привет, изучаю JavaScript тему циклов . Сравниваю циклы while и for и хочу понять разницу между ними. Получается они выполняют условно одно и тоже, но разница в синтаксисе. Это вся разница ?
Вот я одинаковые условия и туда и туда загнал
ССЫЛКАhttps://codepen.io/freelancetesting/pen/VwYEpYbССЫЛКА и результат вышел одинаковым
В большинстве языков с C-подобным синтаксисом (включая JavaScript) for - всего лишь синтаксический сахар для while.

В JavaScript есть два различия между for и while:

1.Отличается семантика continue: в while начнётся новая итерация цикла, а в for сначала выполнится третье выражение в заголовке, а только потом начнётся новая итерация. Но это во всех C-style языках так.

2. А вот это отличие характерно только для JS: при использовании конструкции (let i = ...; ...; ...) на каждой итерации цикла будет создана НОВАЯ переменная i - это очень удобно при использовании замыканий.
Антон Москаленко
Антон Москаленко
99 635
Лучший ответ
На самом деле for - это короткая запись while. Но не любого, а определенного.
Если у тебя есть конструкция:

for(Initialization; Condition; Action) Body;

То она почти (!) эквивалентна следующему:

Initialization;
while(Condition)
{
try
{
Body;
}
finally
{
Action;
}
}

Разница только в том, что переменные, объявленные в Initialization, останутся видны по окончании цикла.
for - цикл со счетчиком, на момент входа в цикл
количество повторений известно.
while - цикл повторяется пока не будет достигнуто
заданное условие.
понять while проще всего на такой модели
N = 1000;
label1:
if( N < 0 ) goto label2; // переход на метку label2 - выход из цикла
...некий код
N = N - 33 // минус любое число
goto label1: переход на метку label1 - продолжение цикла
label2: // попадаем сюда если условие достигнуто N < 0
// некий код
________________
N = 1000;
while( N > 0) // повторять пока N > 0
{
...некий код
N = N - 33 // минус любое число
}
некий код
Мухибуло Ятимов for "на момент входа в цикл количество повторений известно." - это определяется за счет того, что переменная находится внутри этого цикла и там же есть условие, поэтому заранее известно количество итераций ?

// for(var x = 1; x <= 100; x++){
// console.log(x);
// }
Антон Москаленко Количество повторений известно в НОРМАЛЬНОМ цикле со счётчиком (как, например, в Pascal). А в C-style языках условием и приращением в for могут быть совершенно произвольные выражения, вычисляемые заново на каждой итерации - ни о каком "известно" и речи быть не может.
надо сказать, до тебя эти циклы сравнили разработчики go и, трезво рассудив, выкинули конструкцию while нафиг.
так что - да, всё взаимозаменяемо.
Хз зачем столько букв о таких простых вещах... Long story short:
while - цикл с предусловием, "пока";
for - цикл с предусловием и счетчиком, "для";
do..while - цикл с постусловием, "до".
Основная разница не в синтаксисе, а в семантике (не путай причину и следствие).
while – Проверяет условие перед каждой итерацией.
do..while – Проверяет условие после каждой итерации.
for (;;) – Проверяет условие перед каждой итерацией, есть возможность задать дополнительные настройки.

Если ты ничего не понял, начни сначала: https://learn.javascript.ru/first-steps
Sasha Preida
Sasha Preida
79 219
Павел Витов foreach еще =) или range-based for
А ничего, что ты сравниваешь условный оператор и оператор цикла?
Ivan Bazay
Ivan Bazay
53 700
Павел Витов Они оба операторы цикла.
Где-то удобнее while, а где-то for
Например очистка узла node
while (node.lastChild) {
node.removeChild(node.lastChild)
}
... и никаких лишних закорючек
Олег Михайлов
Олег Михайлов
6 545
По сути разницы нет. Разница только в использовании