Введение
Выражение 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 |
|---|---|---|---|---|---|---|
| Базовая поддержка | (Да) | (Да) | (Да) | (Да) | (Да) | (Да) |