Twój drugi przykład zdecydowanie nie powinien działać, ponieważ i
jest zadeklarowany raz, a nie w każdej iteracji, jest to tylko funkcja tego, jak działa ta kategoria pętli.
Możesz to wypróbować w zwykłej przeglądarce:
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.";
}
Nie jest tak, że const
jest to całkowicie zabronione w for
pętlach. Tylko for
to zmodyfikuje const.
Są one ważne:
for(const i = 0;;){ break }
for(const i = 0; i < 10;){ break; }
Te są nieprawidłowe:
for(const i = 0;;){ ++i; break; }
for(const i = 0;;++i){ if(i > 0) break; }
Nie jestem pewien, dlaczego Firefox podaje SyntaxError po przeczytaniu specyfikacji ES2015 (chociaż jestem pewien, że sprytni ludzie z Mozilli mają rację), wygląda na to, że ma zgłosić wyjątek:
Utwórz nowe, ale niezainicjowane niezmienne powiązanie w rekordzie środowiska. Wartość ciągu N to tekst powiązanej nazwy. Jeśli S ma wartość true, wówczas próby uzyskania dostępu do wartości powiązania przed jego zainicjowaniem lub ustawieniem go po zainicjowaniu zawsze będą zgłaszać wyjątek, niezależnie od ustawienia trybu ścisłego operacji, które odwołują się do tego powiązania. S to opcjonalny parametr, który domyślnie ma wartość false.