Während x keine Konstante ist, wie der folgende Code ohne Fehler ausgeführt wird?Verwenden von const in es6 für Schleife
for (const x of [1,2,3]){
console.log(x);
}
Während x keine Konstante ist, wie der folgende Code ohne Fehler ausgeführt wird?Verwenden von const in es6 für Schleife
for (const x of [1,2,3]){
console.log(x);
}
Es auf kompatiblen Browsern wie Chrome funktioniert, weil sie eine neue, unterschiedliche, konstante Größe bei jeder Iteration erstellen:
var arr = [];
for (const x of [1,2,3])
arr.push(() => x);
arr.map(f => f()); // [1,2,3] on Chrome
einige nicht-kompatiblen Browsern wiederverwenden die gleiche Variable statt:
var arr = [];
for (let x of [1,2,3])
arr.push(() => x);
arr.map(f => f()); // [3,3,3] on non-compliant browsers
Deshalb
, werfen sie einen Fehler, wenn in dem obigen Beispiel Sie const
verwenden.
Runtime Semantics: ForIn/OfBodyEvaluation sagt:
- Repeat
- Else
- Assert: lhsKind is lexicalBinding.
- Assert: lhs is a ForDeclaration.
- Let iterationEnv be NewDeclarativeEnvironment (oldEnv).
- Perform BindingInstantiation for lhs passing iterationEnv as the argument.
So jede Iteration eine neue Bindung schaffen sollte. Chrome ist korrekt.
versuchen zu tun x = x + 1 in der für mich gehen lassen, wie es –
In IE11 geht I * einen Fehler hat *, wenn ich es laufen: „Const initialisiert werden muss“. – nnnnnn
'Syntaxerror: invalid für/in Links side' auf Firefox – Oriol