[英]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
变量,因此它在辅助范围内不可用?
使用i
和j
(如果你深入嵌套则使用k
)是许多编程语言共享的标准习语。 ( 实际上,使用i
作为循环变量可以追溯到ForTran
。 )
通过使用i
和j
,任何阅读代码的人都应该意识到这些是标准循环和循环计数器。 使用a
使读者停下来思考“为什么使用它?”
现在,回答你的问题:
在Javascript中,如果你想使用匿名函数,你可以重用变量i
- 但事实如此
-
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.