2017-04-14 71 views
1

將myArray視爲一組對象。JavaScript中的foreach循環語法

這兩段代碼是否等價?

myArray.forEach((item) => { 
    return doAnAction(item); 
}); 


myArray.forEach((item) => { 
     doAnAction(item); 
    }); 

在語法方面有沒有更好的方法?如果是,爲什麼?

+5

是的,他們是等價的。 '.forEach()'不使用它的回調函數的返回值。有關更多信息,您可以隨時查看[MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)。這是一個很好的資源。 –

+0

它們在語法上是相同的,但其中一個具有無意義的「返回」。如果你詢問代碼風格,那麼1)基於意見的問題是關於SO 2的話題。)就我個人而言,我更喜歡後者,因爲增加'return'意味着你使用的是返回值,而沒有返回值。 –

回答

1

據我所知有,因爲你提供了一個匿名函數,而第一個廣告返回doAnAction(item)的結果(這是無論如何忽略不計),第二個確實是在陣列應用到每個元素這兩者之間沒有什麼區別不。

所以他們真的是等價的,第二個對我來說意義更大。

3

更好的問題是,你爲什麼不直接使用功能的回調,像

myArray.forEach(doAnAction); 

回調必須遵循的Array#forEach的API,這是

功能爲每個執行元素,取三個參數:

  • currentValue:Th當前元素正在數組中進行處理。
  • 索引:正在數組中處理的當前元素的索引。
  • array:正在應用forEach()的數組。

如果您只需要元素,那麼你可以直接使用給定的回調沒有任何映射。

+0

我明白了! :)這實際上更清晰!謝謝 – Rose

1

這不是特定於forEach循環。這只是ES6語法。

隨着ES5,這裏是正確的語法:

myArray.forEach(function (item) { 
    doAnAction(item); 
}); 

隨着ES6,你有更多的可能性:

// Solution #1 
myArray.forEach((item) => { 
    doAnAction(item); 
}); 

// Solution #2 
myArray.forEach(item => { 
    doAnAction(item); 
}); 

// Solution #3 
myArray.forEach(item => doAnAction(item)); 
+0

他們沒有提到語法問題。他們詢問「返回」是否會改變這種情況,如果是的話,如何改變這種情況。 –

+0

其實我是在問其語法:)其在帖子的標題中,澄清了我的帖子以及其他觀衆!謝謝 – Rose

+1

@Rose是的,這就是爲什麼我嚴格回答語法的原因......;)我不知道你的'doAnAction'函數是怎麼樣的,但是請注意,在'forEach中使用'return'通常很尷尬'循環。與'map','reduce','filter','some','every'等其他核心數組方法一起使用'return'會更加頻繁。 – Badacadabra