2013-10-16 21 views
2

In this question的答案代碼之一是:意義_在適用()

var arrays = [[1,2,3,4,5,6], [1,1,1,1,1,1], [2,2,2,2,2,2]]; 

_.map(_.zip.apply(_, arrays), function(pieces) { 
    return _.reduce(pieces, function(m, p) {return m+p;}, 0); 
}); 

apply(_, arrays)我不明白什麼_有關。

+1

_是一個在underscore.js(http://underscorejs.org/)中定義的對象...我最好的猜測,它就像$爲jQuery(除$以外使用更多) ...並且必須是函數對象 –

回答

5

apply調用等效於

_.zip([1,2,3,4,5,6], [1,1,1,1,1,1], [2,2,2,2,2,2]) 

的第一個參數apply可以確保zip時調用正確的上下文(this value),這通常是_,下劃線的namespace- constructor-function -object。實際上它並沒有在zip函數中使用,所以我們可以忽略它並通過nullundefined代替。

+0

爲什麼不使用'_.partial(_。zip,arrays)'? –

+1

'_.partial'用於捲曲一個函數,這在這裏不適合。它返回一個函數,而不是一個數組 –

+0

@StephaneRolland:什麼,而不是'apply'?因爲這不會調用'zip',所以用錯誤的參數調用它,並且不返回數組,而是返回一個函數。檢查[什麼'_.partial'確實](http://underscorejs.org/#partial)。 – Bergi

1

沒有太大的意義在那_

參見官方頁面演示http://underscorejs.org/#zip

這裏的要點是apply,它接受第二個參數arrays作爲參數。

所以_.zip(arr1, arr2, arr3)其實是一樣的_.zip.apply(null,[arr1,arr2, arr3])

的第一個參數,它充當this關鍵字,可以是任何東西。 _的選擇可能是一個模因,並強調_的使用。只要按照它:) enter image description here