2

次のコードを検討してください。

for (var x = 0; x < 10; x++) { /* do awesome stuff. 10 times! */ }

console.log(x);

xコンソールにはまだ出力されています。

これにより、JSHintで警告が表示されますx.

for (var x = 0; x < 10; x++) { /* more awesome stuff */ }

JSHintが聖杯ではないことはわかっていますが、xリークを防ぐ方法はありますか? (それが正しい用語であると仮定しますか?

私は試した:

(function () {
    "use strict";

    for (var x = 0; x < 10; x++) { /* do awesome stuff. 10 times! */ }

    console.log(x);

    for (var x /* warning here */ = 0; x < 10; x++) { /* more awesome stuff */ }
})();

だから"use strict";行く方法ではありません。

私はそれをさらに深く掘り下げてみました(そして、これは私を混乱させるほど混乱させます):

(function () {
    "use strict";

    {
        for (var x = 0; x < 10; x++) { /* do awesome stuff. 10 times! */ }
    }

    console.log(x); // STILL WORKS...

    for (var x /* warning here */ = 0; x < 10; x++) { /* more awesome stuff */ }
})();

さらに悪いことに:

呼び出しの行で、console.logJSHintxは、スコープ外で使用されていること、および次の行で再宣言していること について警告しますx

4

1 に答える 1

0

変数は、ブロックではなく、JavaScript の関数にのみスコープされます。各 for ループを個別にスコープする必要がある場合は、次のようにする必要があります。

(function () {
    for (var x = 0; x < 10; x++) { /* do awesome stuff. 10 times! */ }
})();
(function () {
    for (var x = 0; x < 10; x++) { /* more awesome stuff */ }
})();

または、x変数を再宣言せずに再利用することもできますが、それでも問題なく動作します。

于 2014-05-15T16:38:54.793 に答える