次のコードを検討してください。
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.log
JSHintx
は、スコープ外で使用されていること、および次の行で再宣言していること について警告しますx
。