Javascript中for循环的作用域



考虑以下代码:

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

相关内容

  • 没有找到相关文章

最新更新