请考虑以下代码:
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
的下一行。
答案 0 :(得分: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
变量而不重新声明它,这仍然可以正常工作。