Ваш второй пример определенно не должен работать, потому что 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 имеет значение true, то попытки получить доступ к значению привязки до ее инициализации или установить ее после инициализации всегда будут вызывать исключение, независимо от настройки строгого режима операций, которые ссылаются на эту привязку. S - необязательный параметр, значение по умолчанию - false.