首页 > 解决方案 > 当在单独的循环中定义所述变量时,在循环内调用变量

问题描述

我希望有人——最好是 Jon Skeet,但我会接受凡人的回答——向我解释以下基本的 JavaScript 场景。我有一个类似于以下的功能:

myFunction() 
{

    var row;

       for (var i = 0; i < collectionView.itemsAdded.length; i++)
       {
           row = this.collectionView.itemsAdded[i];
       }



       for (var i = 0; i < collectionView.itemsAdded.length; i++)
       {
           // this always logs as the last value it was given from the first loop. I expected it to give me the same variety of values it gave me in the first loop.
           row.property1 = true;
       }

}

出乎意料的是,第二次使用row总是导致第一个 for 循环给出的最终值。即如果collectionView.itemsAdded.length是 45,row将记录为 44(bc 零索引)并在 second 的每次迭代中保持 44 loop

我错误地期望row在第二个中调用for loop就足以给row我在第一个中给我的相同结果for loop。我认为对于 second 的每次迭代looprow都会将其记录为不同的项目-相反,它会记录每次this.collectionView.itemsAdded[44]从第一个循环获得的记录。

在我的脑海里,我明白了。但是谁能进一步解释这里发生了什么?如果应该是行this.collectionView.itemsAdded[i]- 为什么它不能转移到另一个循环?如果我想要相同的值,为什么必须row = this.collectionView.itemsAdded[i]在第二个中再次声明?for loop

标签: javascriptloopsfor-loopscope

解决方案


row只是持有一个对象的引用。在第一个循环中,它不断变化。循环结束后,row不会更新 的值。因此,在第二个循环中,操作是在同一个对象上完成的,即分配给行的最后一个值。


推荐阅读