for
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since иÑÐ»Ñ 2015 г..
Ðведение
ÐпеÑаÑÐ¾Ñ for ÑоздаÑÑ Ñикл, ÑоÑÑоÑÑий из ÑÑÐµÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑÑ Ð²ÑÑажений, заклÑÑеннÑÑ Ð² кÑÑглÑе Ñкобки и ÑазделеннÑÑ ÑоÑкой Ñ Ð·Ð°Ð¿ÑÑой, за коÑоÑÑми ÑледÑÐµÑ Ð¸Ð½ÑÑÑÑкÑÐ¸Ñ (ÑаÑÑо блок инÑÑÑÑкÑий), коÑоÑÐ°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° вÑполнÑÑÑÑÑ Ð² Ñикле.
ÐнÑеÑакÑивнÑй пÑимеÑ
let str = "";
for (let i = 0; i < 9; i++) {
str = str + i;
}
console.log(str);
// Expected output: "012345678"
СинÑакÑиÑ
for ([иниÑиализаÑиÑ]; [ÑÑловие]; [ÑиналÑное вÑÑажение])
[инÑÑÑÑкÑиÑ]
-
иниÑиализаÑиÑÐеобÑзаÑелÑнÑй- : ÐÑÑажение (вклÑÑÐ°Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¿ÑиÑваиваниÑ) или обÑÑвление пеÑеменной, вÑÑиÑлÑемое один Ñаз пеÑед наÑалом Ñикла. ÐбÑÑно иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¸Ð½Ð¸ÑиализаÑии пеÑеменной ÑÑеÑÑика. ÐÑо вÑÑажение Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð¿ÑионалÑно обÑÑвлÑÑÑ Ð½Ð¾Ð²Ñе пеÑеменнÑе Ñ ÐºÐ»ÑÑевÑми Ñловами
varилиlet. ÐеÑеменнÑе, обÑÑвленнÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑvar, не ÑвлÑÑÑÑÑ Ð»Ð¾ÐºÐ°Ð»ÑнÑми Ð´Ð»Ñ Ñикла, Ñ.е. они Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ Ð² Ñой же облаÑÑи видимоÑÑи, ÑÑо и Ñиклfor. ÐеÑеменнÑе, обÑÑвленнÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑlet, ÑвлÑÑÑÑÑ Ð»Ð¾ÐºÐ°Ð»ÑнÑми Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑа и не доÑÑÑÐ¿Ð½Ñ Ð·Ð° пÑеделами Ñикла.
РезÑлÑÑÐ°Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑого вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¾ÑбÑаÑÑваеÑÑÑ.
- : ÐÑÑажение (вклÑÑÐ°Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¿ÑиÑваиваниÑ) или обÑÑвление пеÑеменной, вÑÑиÑлÑемое один Ñаз пеÑед наÑалом Ñикла. ÐбÑÑно иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¸Ð½Ð¸ÑиализаÑии пеÑеменной ÑÑеÑÑика. ÐÑо вÑÑажение Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð¿ÑионалÑно обÑÑвлÑÑÑ Ð½Ð¾Ð²Ñе пеÑеменнÑе Ñ ÐºÐ»ÑÑевÑми Ñловами
-
ÑÑловиеÐеобÑзаÑелÑнÑй- : ÐÑÑажение, коÑоÑое бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑ Ð¿ÐµÑед каждой иÑеÑаÑией Ñикла. ÐÑли вÑÑажение оÑениваеÑÑÑ ÐºÐ°Ðº true, инÑÑÑÑкÑÐ¸Ñ Ð²ÑполнÑеÑÑÑ. ÐÑли вÑÑажение оÑениваеÑÑÑ ÐºÐ°Ðº false, вÑполнение вÑÑ
Ð¾Ð´Ð¸Ñ Ð¸Ð· Ñикла и пеÑеÑ
Ð¾Ð´Ð¸Ñ Ðº пеÑвой инÑÑÑÑкÑии поÑле конÑÑÑÑкÑии
for.
УÑловие не ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм. ÐÑли его неÑ, ÑÑловие вÑегда вÑегда оÑениваеÑÑÑ ÐºÐ°Ðº
true. - : ÐÑÑажение, коÑоÑое бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑ Ð¿ÐµÑед каждой иÑеÑаÑией Ñикла. ÐÑли вÑÑажение оÑениваеÑÑÑ ÐºÐ°Ðº true, инÑÑÑÑкÑÐ¸Ñ Ð²ÑполнÑеÑÑÑ. ÐÑли вÑÑажение оÑениваеÑÑÑ ÐºÐ°Ðº false, вÑполнение вÑÑ
Ð¾Ð´Ð¸Ñ Ð¸Ð· Ñикла и пеÑеÑ
Ð¾Ð´Ð¸Ñ Ðº пеÑвой инÑÑÑÑкÑии поÑле конÑÑÑÑкÑии
-
ÑиналÑное вÑÑажениеÐеобÑзаÑелÑнÑй- : ÐÑÑажение, вÑполнÑÑÑееÑÑ Ð² конÑе иÑеÑаÑии Ñикла. ÐÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð´Ð¾ ÑледÑÑÑего вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑловиÑ. ÐбÑÑно иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ ÑвелиÑÐµÐ½Ð¸Ñ Ð¿ÐµÑеменной ÑÑÑÑÑика.
-
инÑÑÑÑкÑиÑ
- : ÐнÑÑÑÑкÑиÑ, коÑоÑÐ°Ñ Ð²ÑполнÑеÑÑÑ, когда ÑÑловие Ñикла иÑÑинно. ЧÑоб вÑполниÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво инÑÑÑÑкÑий в Ñикле, иÑполÑзÑйÑе блок инÑÑÑÑкÑий (
{ ... }) Ð´Ð»Ñ Ð³ÑÑппиÑовки ÑÑÐ¸Ñ Ð¸Ð½ÑÑÑÑкÑий. ЧÑÐ¾Ð±Ñ Ð½Ðµ вÑполнÑÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð¹ инÑÑÑÑкÑии в Ñикле, иÑполÑзÑйÑе пÑÑÑÑÑ Ð¸Ð½ÑÑÑÑкÑÐ¸Ñ (;).
- : ÐнÑÑÑÑкÑиÑ, коÑоÑÐ°Ñ Ð²ÑполнÑеÑÑÑ, когда ÑÑловие Ñикла иÑÑинно. ЧÑоб вÑполниÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво инÑÑÑÑкÑий в Ñикле, иÑполÑзÑйÑе блок инÑÑÑÑкÑий (
ÐÑимеÑÑ
>ÐÑполÑзование for
СледÑÑÑий Ñикл for наÑинаеÑÑÑ Ð¾Ð±ÑÑвлением пеÑеменной i и Ð·Ð°Ð´Ð°Ð½Ð¸Ñ ÐµÐ¹ знаÑÐµÐ½Ð¸Ñ 0. ÐаÑем пÑовеÑÑеÑ, ÑÑо i менÑÑе девÑÑи, вÑполнÑÐµÑ Ð¸Ð½ÑÑÑÑкÑÐ¸Ñ Ð²Ð½ÑÑÑи блока инÑÑÑÑкÑий и инкÑеменÑиÑÑÐµÑ (ÐнкÑеменÑ) i на каждой иÑеÑаÑии.
for (let i = 0; i < 9; i++) {
console.log(i);
// еÑÑ ÐºÐ°ÐºÐ¸Ðµ-Ñо инÑÑÑÑкÑии
}
СинÑакÑÐ¸Ñ Ð±Ð»Ð¾ÐºÐ° иниÑиализаÑии
Рблоке иниÑиализаÑии возможно как обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑеменнÑÑ
, Ñак и более ÑложнÑе вÑÑажениÑ. Ðднако вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ могÑÑ Ð¸ÑполÑзоваÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ in без Ñкобок, поÑÐ¾Ð¼Ñ ÑÑо ÑÑо конÑликÑÑÐµÑ Ñ Ñиклом for...in.
for (let i = "start" in window ? window.start : 0; i < 9; i++) {
console.log(i);
}
// SyntaxError: 'for-in' loop variable declaration may not have an initializer.
// ÐÑе вÑÑажение иниÑиализаÑии пеÑеменной взÑÑо в Ñкобки
for (let i = ("start" in window ? window.start : 0); i < 9; i++) {
console.log(i);
}
// ÐÑÑажение `in` взÑÑо в Ñкобки
for (let i = ("start" in window) ? window.start : 0; i < 9; i++) {
console.log(i);
}
ÐеобÑзаÑелÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² for
ÐÑе 3 вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² Ñикле for не обÑзаÑелÑнÑ.
ÐапÑимеÑ, в блоке иниÑиализаÑии не ÑÑебÑеÑÑÑ Ð¾Ð¿ÑеделÑÑÑ Ð¿ÐµÑеменнÑе:
let i = 0;
for (; i < 9; i++) {
console.log(i);
// еÑÑ Ð²ÑÑажениÑ
}
Ðак и блок иниÑиализаÑии, блок ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð½Ðµ обÑзаÑелен. ÐÑли пÑопÑÑÑиÑе ÑÑо вÑÑажение, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑвеÑенÑ, ÑÑо пÑеÑвÑÑе Ñикл где-Ñо в Ñеле, а не ÑоздадиÑе беÑконеÑнÑй Ñикл.
for (let i = 0; ; i++) {
console.log(i);
if (i > 3) break;
// ÑÑÑ ÐºÐ°ÐºÐ¾Ð¹-Ñо код
}
ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑопÑÑÑиÑÑ Ð²Ñе 3 блока. Снова ÑбедиÑеÑÑ, ÑÑо иÑполÑзÑеÑе break, ÑÑоб законÑиÑÑ Ñикл, а Ñакже измениÑÑ ÑÑÑÑÑик, Ñак ÑÑо ÑÑловие Ð´Ð»Ñ break бÑло иÑÑинно в нÑжнÑй моменÑ.
let i = 0;
for (;;) {
if (i > 3) break;
console.log(i);
i++;
}
ÐÑполÑзование for без блока инÑÑÑÑкÑий
СледÑÑÑий Ñикл for вÑÑиÑлÑÐµÑ ÑмеÑение позиÑии Ñзла в ÑекÑии [ÑиналÑное вÑÑажение], и, ÑледоваÑелÑно, не ÑÑебÑÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½ÑÑÑÑкÑии или блока инÑÑÑÑкÑий внÑÑÑи Ñикла, вмеÑÑо ÑÑого иÑполÑзÑеÑÑÑ ÑоÑка Ñ Ð·Ð°Ð¿ÑÑой (пÑÑÑÐ°Ñ Ð¸Ð½ÑÑÑÑкÑиÑ).
function showOffsetPos(id) {
let left = 0,
top = 0;
for (
let itNode = document.getElementById(id); // иниÑиализаÑиÑ
itNode; // ÑÑловие
left += itNode.offsetLeft,
top += itNode.offsetTop,
itNode = itNode.offsetParent // ÑиналÑное вÑÑажение
); // ÑоÑка Ñ Ð·Ð°Ð¿ÑÑой (пÑÑÑÐ°Ñ Ð¸Ð½ÑÑÑÑкÑиÑ)
console.log(
`СмеÑение позиÑии ÑлеменÑа "${id}":
Ñлева: ${left}px;
ÑвеÑÑ
Ñ: ${top}px;`,
);
}
showOffsetPos("content");
// ÐÑводиÑ:
// СмеÑение позиÑии ÑлеменÑа "content":
// Ñлева: 0px;
// ÑвеÑÑ
Ñ: 153px;"
ÐÑимеÑание: Ð ÑÑом ÑлÑÑае, когда Ð²Ñ Ð½Ðµ иÑполÑзÑеÑе ÑÑловие внÑÑÑи Ñикла, ÑоÑка Ñ Ð·Ð°Ð¿ÑÑой ÑÑавиÑÑÑ ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ñикла.
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification > # sec-for-statement > |