考虑以下代码:
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
调用 JSHint 的行上警告我x
被使用超出范围和我正在重新声明的下一行 x
。