for..in和for循环之间的区别,以及计数器声明

时间:2011-10-31 02:41:18

标签: javascript performance loops for-loop

for 循环实施之间的差异(速度,性能,副作用......):

之间

var i;
for(i = 0; i < length; i++){ //Do something}
// more code

for(var i = 0; i < length; i++){ //Do something}
// more code

for(i = 0; i < length; i++){ //Do something}
// more code

之间
var e;
for( e in array){ //Do something}
// more code

for(var e in array){ //Do something}
// more code

for(e in array){ //Do something}
// more code

3 个答案:

答案 0 :(得分:2)

没有区别。

JavaScript变量只有函数范围,虽然你可以在var循环的初始化部分放置一个for语句,但实际上声明是“hoisted”到顶部范围使得当您的第二个案例运行时,它们的处理方式与第一个案例完全相同。

编辑:由于您在之后更新了问题,因此您在不使用var关键字的情况下添加的第三种语法意味着变量i(或e)将作为全局创建 - 除非它已作为全局存在,在这种情况下,现有变量将被覆盖。全局变量访问比局部变量访问慢。

注意:我对这个问题的解释是它没有将循环标准与for..in变量进行比较,它只是将不同的变量声明方法相互比较用于标准for循环,然后做同样的事情。再次为for..in循环。

答案 1 :(得分:2)

与你的计数器变量的声明没有区别。

但始终使用 <{strong> var

宣布您的变量

否则他们会污染javascript已经很脏的全局范围......

至于for...in与传统for look here...

这是我对重复问题的回答......

答案 2 :(得分:0)

是的,javascript中for循环和for / in循环之间存在差异。这是不同的

考虑这个数组

var myArr = ["a", "b", "c"];

后来,我在这个数组中添加了一个元素,但是以不同的方式,如下:

myArr[myArr.length + 1] = "d";

此时,如果你是console.log那么这就是数组的样子

["c", "b", "a", undefined × 1, "d"]

现在,让我们使用for和for / in循环遍历数组,看看有什么区别: 首先,让我们试试for循环

for(var i = 0; i != myArr.length; i++) {     // note, i used " != " instead of " < ". Yes this is faster.
  console.log(myArr[i]);
}
// output will look like this:
// "a" 
// "b" 
// "c"
// undefined × 1
// "d" 
// - This still shows the undefined value in the array.

现在,让我们看一下for / in循环

for(key in myArr) {
  console.log(myArr[key]);
}
// array will look like:
// "a"
// "b"
// "c"
// "d"
// This will skip the undefined value.

差异1 :使用for / in循环时,javascript解释器将跳过所有null或undefined的值。此外,for / in循环将所有值(如果遇到原始值)转换为其等效的包装器对象。因为for循环没有这样做。

差异2 :当使用for循环时,我们在循环中声明了变量i,如果在该函数中写入for循环,则此变量将在函数范围内。这意味着,在函数结束之前,变量i仍然可用,甚至在for循环之外,但在该函数内。在for / in循环的情况下,&#34;键&#34;的范围。在for / in循环停止执行后,变量立即死亡,这意味着内存利用率会降低。