Ваш другий приклад точно не повинен працювати, оскільки i
оголошується один раз, а не на кожній ітерації це лише функція того, як працює ця категорія циклів.
Ви можете спробувати це в звичайному браузері:
for (var i = 0, otherVar = ""; i < [1,2,3,4].length; i += 1){
console.log(otherVar)
otherVar = "If otherVar was initialized on each iteration, then you would never read me.";
}
Це не той випадок, який const
повністю заборонений у for
циклах. Лише for
те, що змінить const, це.
Вони дійсні:
for(const i = 0;;){ break }
for(const i = 0; i < 10;){ break; }
Вони недійсні:
for(const i = 0;;){ ++i; break; }
for(const i = 0;;++i){ if(i > 0) break; }
Я не впевнений, чому Firefox видає SyntaxError після прочитання специфікації ES2015 (хоча я впевнений, що розумні люди в Mozilla мають рацію), схоже, це повинно викликати виняток:
Створіть нову, але неініціалізовану незмінювану прив'язку в Записі навколишнього середовища. Значення рядка N - це текст пов'язаного імені. Якщо S істинне, тоді спроби отримати доступ до значення прив'язки до її ініціалізації або встановити її після її ініціалізації завжди видаватимуть виняток, незалежно від встановленого жорсткого режиму операцій, які посилаються на це прив'язку. S - необов’язковий параметр, який за замовчуванням має значення false.