Chrome
とFirefox
で実行すると、次のコードが異なる動作を返します。ブラウザ間で "let"キーワードを使用した異なる変数スコープ
var obj = {
key: 'val',
key2: 'val'
};
function x(b) {
setTimeout(b, 1000);
}
var keys = Object.keys(obj);
for (let ki of keys) {
x(function() {
console.log(ki); // Prints key2 key2 in Firefox, key key2 in Chrome
});
}
なぜこれが起こっているのでしょうか?それはバグですか?正しい出力でなければならないのは、Chromeが返すもので、スペックを数えていますか?
Firefoxの実装はまだ完了していません。 http://kangax.github.io/compat-table/es6/#test-letその間に、ループ内にローカルの 'let'変数を作成し、それを使用します。 'let kki = ki; ' –
Firefoxでは不完全な実装のようです。ループの反復ごとに完全に一意の変数 'ki'があると思われます.Firefoxはそれをまだ行っていません。すべての反復で同じ変数を共有しています。 – jfriend00
ありがとうございました! =) –