【问题标题】:difference between for..in and for loops, and counter declarationfor..in 和 for 循环之间的区别以及计数器声明
【发布时间】:2011-10-31 02:41:18
【问题描述】:

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

【问题讨论】:

  • 这已经被问了一百万次了......
  • 怀疑它们的性能各不相同,但我可能错了
  • 可以在循环内修改数组吗?你真的访问了前两个例子中的数组元素吗(甚至还有一个数组)?
  • @mu:没有。另一个问题是关于 Java 的。

标签: javascript performance loops for-loop


【解决方案1】:

没有区别。

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

编辑:由于您更新了问题在我回答之后,您在不使用 var 关键字的地方添加的第三个语法表示变量 @987654325 @(或e)将被创建为全局变量——除非它已经作为全局变量存在,在这种情况下,现有变量将被覆盖。全局变量访问比局部变量访问慢。

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

【讨论】:

  • 嗯,你说得对,将var 放在哪里并不重要,除了浪费代码字节。但是,for...in 与另一个 for 循环不同,在某些情况下,一个会比另一个更好......PS:我没有投票......我发誓 XD(真的)
  • 回答了一半的问题(但不值得一票否决)
  • @JCOC611 - 问题没有将标准 for 循环与 for..in 进行比较,而是将不同的标准 for 循环相互比较,然后(有点并行)比较不同的 for ..相互循环。 我发布了我的答案以引入最初未提及的第三种语法之后,该问题也被编辑了。所以对于投反对票的人(尤其是没有解释的人):这太苛刻了。
  • @nnnnnn:啊,我错过了……对不起。 +1 :)
  • @JCOC611 - 好吧,也许我阅读问题的方式并不是它的实际意图,但无论如何感谢您平衡反对票与您的 +1。
【解决方案2】:

关于你的计数器变量的声明没有区别..

但始终使用 var

声明您的变量

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

for...in 与传统的for 而言look here...

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

【讨论】:

    【解决方案3】:

    是的,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:javascript 解释器在使用 for/in 循环时将跳过所有为 null 或未定义的值。此外,如果 for/in 循环遇到原始值,它会将所有值转换为其等效的包装器对象。因为 for 循环不这样做。

    区别2:当使用for循环时,我们在循环中声明了变量i,如果for循环是写在那个函数里面的话,这个变量会被限定在一个函数里面。这意味着,直到函数结束,变量 i 仍然可用,即使在 for 循环之外,但在该函数内。而在 for/in 循环的情况下,“key”变量的作用域会在 for/in 循环停止执行后立即消失,这意味着内存利用率较低。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 2016-08-02
      • 2019-01-11
      • 1970-01-01
      相关资源
      最近更新 更多