2016-06-29 7 views
1

ChromeFirefoxで実行すると、次のコードが異なる動作を返します。ブラウザ間で "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が返すもので、スペックを数えていますか?

+1

Firefoxの実装はまだ完了していません。 http://kangax.github.io/compat-table/es6/#test-letその間に、ループ内にローカルの 'let'変数を作成し、それを使用します。 'let kki = ki; ' –

+1

Firefoxでは不完全な実装のようです。ループの反復ごとに完全に一意の変数 'ki'があると思われます.Firefoxはそれをまだ行っていません。すべての反復で同じ変数を共有しています。 – jfriend00

+1

ありがとうございました! =) –

答えて

1

私はそれがバグだと思います。あなたはバベルとjsBin上でそれを有効に実行してみることができ、あなたはFirefoxでChromeの動作を参照してください。

http://jsbin.com/nadikatari/edit?html,js,console,output

Firefoxはまだ聞かせて実装されていないようですね。この時点でES6を使用する場合は、実際にBabelを使用してES5に移動する必要があります。

+0

あなたの入力とjsBinありがとうございます!私はあなたの答えを6分で受け入れます。 –

関連する問題