簡體   English   中英

JavaScript數組迭代方法

[英]JavaScript array iteration method

我有一個循環遍歷所有項目的循環:

for (i=0; i < this.widgets.length; i++) {
  this.changeWidgetArray(this.widgets[i]); 
}

在for循環中,對於每個單個元素,我都將其稱為“ changeWidgetArray”。 在此方法中,從上方更改了“小部件”數組。 更改“ changeWidgetArray”中的數組是否會影響循環迭代?

我的問題是:

此刻,當迭代從第一項開始時,是“收集”了其所有元素的整個數組,還是JavaScript在下一迭代步驟開始之前動態地逐個獲取了數組。

還是這取決於JavaScript實現? 這是在ECMA-Script規范中定義的嗎?

在此先感謝

是的

for (i=0; i < this.widgets.length; i++) {
  this.changeWidgetArray(); 
}

for (var i=0, max=this.widgets.length; i < max; i++) {
  this.changeWidgetArray(); 
}

在循環迭代期間, 不會 緩存 任何變量。 (除非您自己在臨時變量中執行此操作)

因此, this.widgets.length將是widgets數組每次被評估時的確切長度,因為每次更改數組時都會更新length的值。

您可以通過將長度分配給一個臨時變量來緩存長度,如下所示:

for (var i=0, l = this.widgets.length; i < l; i++) {

但這可能不是一個好主意,因為您要在循環中更改數組,這可能使您指向數組中的無效索引。

每次修改數組包含的集合時,數組長度都會更新。 每次引用array.length時,它將反映當前數組的大小。

出於這個原因,以及許多性能優勢,您應該始終這樣編寫代碼:

for(var i = 0, l = array.length; i < l; i++){
  // Do stuff with array[l]
}

如果這樣做的話,您還可以尋求更多的性能(假設遍歷的方向無關緊要):

var l = array.length;
while(l--){
  // Do stuff with array[l]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM