在Javascript中确定for循环的范围

时间:2014-05-15 16:36:19

标签: javascript lifetime-scoping

请考虑以下代码:

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的下一行。

1 个答案:

答案 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变量而不重新声明它,这仍然可以正常工作。