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.log调用 JSHint 的行上警告我x被使用超出范围和我正在重新声明的下一行 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 回答