Введение
Выражение for создаёт цикл, состоящий из 3 необязательных выражений в круглых скобках, разделённых точками с запятой.
Синтаксис
for ([инициализация]; [условие]; [финальное выражение])выражение
- инициализация
- Выражение (в том числе выражения присвоения) или определение переменных. Обычно используется, чтобы инициализировать счётчик. Это выражение может опционально объявлять новые переменные с помощью ключевого слова
var
. Эти переменные видимы не только в цикле, т.е. в той же области области видимости, что и циклfor
. Результат этого выражения отбрасывается. - условие
- Выражение, выполняющееся на каждой интерации цикла. Если выражение истинно, цикл выполняется. Условие не является обязательным. Если его нет, условие всегда считается истиной. Если выражение ложно, выполнение переходит к первому выражению, следующему за
for.
- финальное выражение
- Выражение, выполняющееся в конце интерации цикла. Происходит до следующего выполнения условия. Обычно используется для обновления или увеличения переменной счётчика.
- выражение
- Выражение, которое выполняется, когда условие цикла истинно. Чтоб выполнить множество выражений в цикле, используйте блок (
{ ... }
) для группировки этих выражений. Чтобы не выполнять никакого выражения в цикле, используйте пустое выражение (;
).
Примеры
Использование for
Следующий цикл for
начинается объявлением переменной i
и задания ей значения 0
. Затем проверяет, что i
меньше девяти, выполняет выражения внутри цикла и увеличивает i
на 1 каждый раз.
for (var i = 0; i < 9; i++) { console.log(i); // ещё какие-то выражения }
Необязательные выражения в for
Все 3 выражения в цикле for
не обязательны.
Например, в блоке инициализации не требуется определять переменные:
var i = 0; for (; i < 9; i++) { console.log(i); // ещё выражения }
Как и блок инициализации, блок условия не обязателен. Если пропустите это выражение, вы должны быть уверены, что прервете цикл где-то в теле, а не создадите бесконечный цикл.
for (var i = 0;; i++) { console.log(i); if (i > 3) break; // тут какой-то код }
Вы можете пропустить все 3 блоки. Снова убедитесь, что используете break
, чтоб закончить цикл, а также изменить счётчик, так что условие для break было истинно в нужный момент.
var i = 0; for (;;) { if (i > 3) break; console.log(i); i++; }
Использование for
без блока выражений
Следующий цикл for
вычисляет смещение позиции узла в секции [финальное выражение], и, следовательно, не требует использования выражения внутри цикла или блока
, пустое выражение используется вместо этого.
function showOffsetPos (sId) { var nLeft = 0, nTop = 0; for (var oItNode = document.getElementById(sId); // инициализация oItNode; // условие nLeft += oItNode.offsetLeft, nTop += oItNode.offsetTop, oItNode = oItNode.offsetParent) // финальное выражение /* пустое выражение */ ; console.log("Смещение позиции элемента \"" + sId + "\":\n left: " + nLeft + "px;\n top: " + nTop + "px;"); } // Пример вызова: showOffsetPos("content"); // Выводит: // "Смещение позиции элемента "content": // left: 0px; // top: 153px;"
Спецификации
Спецификация | Статус | Комментарий |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) Определение 'for statement' в этой спецификации. |
Стандарт | |
ECMAScript 5.1 (ECMA-262) Определение 'for statement' в этой спецификации. |
Стандарт | |
ECMAScript 3rd Edition (ECMA-262) Определение 'for statement' в этой спецификации. |
Стандарт | |
ECMAScript 1st Edition (ECMA-262) Определение 'for statement' в этой спецификации. |
Стандарт | Изначальное определение |
Поддержка в браузерах
Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Базовая поддержка | (Да) | (Да) | (Да) | (Да) | (Да) |
Возможность | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Базовая поддержка | (Да) | (Да) | (Да) | (Да) | (Да) | (Да) |