繁体   English   中英

在JavaScript中退出while循环时释放计数器变量

[英]Free the counter variable when a while loop exits in JavaScript

我发现在使用JavaScript创建大量对象时, while循环是调整性能的最佳工具。

我这样编写循环时获得最佳速度:

var i = array.length
while (i--) {
  // Do stuff
}

但是,如果我想嵌套while循环,我必须使用不同的变量名,否则计数器会中断:

var i = array1.length
while (i--) {
  var i = array2.length
  while (i--) {
    // NOPE THE COUNTER IS NOW BROKEN
  }
}

有人提出了j ,但是为什么不用一个名为a的变量启动第一个数组并在那里上升?

在这种情况下,最佳做法是什么?

有没有办法delete变量,因此它在辅助范围内不可用?

使用ij (如果你深入嵌套则使用k )是许多编程语言共享的标准习语。 实际上,使用i作为循环变量可以追溯到ForTran

通过使用ij ,任何阅读代码的人都应该意识到这些是标准循环和循环计数器。 使用a使读者停下来思考“为什么使用它?”

现在,回答你的问题:

在Javascript中,如果你想使用匿名函数,你可以重用变量i - 但事实如此

  • 不是标准做法
  • 反模式 - AKA愚蠢
  • 执行速度较慢。

-

var i = 10;
while (i--) {
  (function() {
    // New function, this is a new `i`, completely masking the original.
    var i = 20;
    while(i--) {
    }
  {();
}

你需要变量范围。 在C中,您可以使用块创建变量范围:

int i = 1;
{
    int i = 2;
    printf("inner i = %d\n", i);
}
printf("outer i = %d\n", i);

//=>
inner i = 2
outer i = 1

但是,在javascript中,block不会创建新的变量范围,而是共享外部变量范围。 您需要函数来创建新的变量范围。

var i = 2;
while (i--) {
    console.log("outer i = " + i);
    (function () {
        var i = 3;
        while (i--) {
            console.log("inner i = " + i);
        }
    })();
}

//=>
outer i = 1
inner i = 2
inner i = 1
inner i = 0
outer i = 0
inner i = 2
inner i = 1
inner i = 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM