--- title: for slug: Web/JavaScript/Reference/Statements/for tags: - JavaScript - for - Цикл translation_of: Web/JavaScript/Reference/Statements/for ---
Оператор for створює цикл, що складається з трьох необов'язкових виразів, заключених у дужки та розділених крапками з комами, за ними розташовані команди (зазвичай, блок команд), який потрібно виконати у циклі.
for ([initialization]; [condition]; [final-expression]) statement
initializationvar або let. Змінні, оголошені через var не є локальними для циклу, тобто, вони знаходяться у тій же області видимості, що й сам цикл for. Змінні, оголошені через let, є локальними змінними циклу.conditionstatement виконується. Ця перевірка є необов'язковою. Якщо вона пропущена, то умова завжди оцінюється як true. Якщо вираз оцінюється як false, виконання переходить до першого виразу, розташованого після конструкції for.final-expressioncondition. Зазвичай використовується, щоб оновити або збільшити значення змінної лічильника.statement{ ... }), щоб згрупувати ці команди. Щоб не виконувати жодних команд, скористайтесь {{jsxref("Statements/empty", "порожнім", "", 0)}} оператором (;).forНаведений цикл for починається з оголошення змінної i та ініціалізації її значенням 0. Він перевіряє, що значення i менше дев'яти, виконує дві команди та збільшує i на 1 після кожного проходу через цикл.
for (let i = 0; i < 9; i++) {
console.log(i);
// ще команди
}
forВсі три вирази у шапці циклу for є необов'язковими.
Наприклад, у блоці initialization не вимагається ініціалізувати змінні:
var i = 0;
for (; i < 9; i++) {
console.log(i);
// ще команди
}
Як і блок initialization, блок умови condition також є необов'язковим. Якщо ви пропускаєте цей вираз, то маєте переконатись, що встановили переривання у тілі циклу, щоб не створити нескінченний цикл.
for (let i = 0;; i++) {
console.log(i);
if (i > 3) break;
// ще команди
}
Ви також можете пропустити всі три блоки. Знову ж таки, переконайтеся, що ви встановили оператор {{jsxref("Statements/break", "break")}}, щоб закінчити цикл, а також змінили (збільшили) змінну, щоб умова для переривання в якийсь момент набула значення true.
var i = 0;
for (;;) {
if (i > 3) break;
console.log(i);
i++;
}
for без командНаведений цикл for обчислює зміщення вузла у розділі final-expression, і тому не вимагає використання розділу statement, замість нього використовується крапка з комою.
function showOffsetPos(sId) {
var nLeft = 0, nTop = 0;
for (
var oItNode = document.getElementById(sId); /* ініціалізація */
oItNode; /* умова */
nLeft += oItNode.offsetLeft, nTop += oItNode.offsetTop, oItNode = oItNode.offsetParent /* final-expression */
); /* крапка з комою */
console.log('Зміщення елемента \'' + sId + '\':\n left: ' + nLeft + 'px;\n top: ' + nTop + 'px;');
}
/* Приклад виклику: */
showOffsetPos('content');
// Результат:
// "Зміщення елемента "content":
// left: 0px;
// top: 153px;"
| Специфікація | Статус | Коментар |
|---|---|---|
| {{SpecName('ES1', '#sec-12.6.2', 'for statement')}} | {{Spec2('ES1')}} | Початкове визначення. |
| {{SpecName('ES3', '#sec-12.6.3', 'for statement')}} | {{Spec2('ES3')}} | |
| {{SpecName('ES5.1', '#sec-12.6.3', 'for statement')}} | {{Spec2('ES5.1')}} | |
| {{SpecName('ES6', '#sec-for-statement', 'for statement')}} | {{Spec2('ES6')}} | |
| {{SpecName('ESDraft', '#sec-for-statement', 'for statement')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.statements.for")}}