4
xは定数ではありませんが、次のコードはどのようにエラーなく実行されますか?ループのためにes6でconstを使用する
for (const x of [1,2,3]){
console.log(x);
}
xは定数ではありませんが、次のコードはどのようにエラーなく実行されますか?ループのためにes6でconstを使用する
for (const x of [1,2,3]){
console.log(x);
}
彼らは各反復で新しい、異なる、一定の変数を作成するので、それはクロムのような対応のブラウザで動作します:
var arr = [];
for (const x of [1,2,3])
arr.push(() => x);
arr.map(f => f()); // [1,2,3] on Chrome
一部非対応のブラウザではなく、同じ変数を再利用:
var arr = [];
for (let x of [1,2,3])
arr.push(() => x);
arr.map(f => f()); // [3,3,3] on non-compliant browsers
したがって、上記の例ではconst
を使用するとエラーが発生します。
Runtime Semantics: ForIn/OfBodyEvaluationは言う:
- 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.
だから、各反復は、新しいバインディングを作成する必要があります。 Chromeは正しいです。
私はそれが行く方法を行くためにx = x + 1を試してください –
私はそれを実行するとI * do *エラーを取得します: "Constは初期化されなければなりません"。 – nnnnnn
Firefoxの – Oriol