考虑以下代码:
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
。
变量在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
变量而不重新声明它,这仍然可以正常工作。