2010-01-25 60 views
4

我注意到jQuery中.each()和.grep()函數的回調函數之間的參數順序有所不同。爲什麼jQuery.each()和jQuery.grep()具有不同的參數順序?

jQuery.grep(array, function(elementOfArray, indexInArray), [ invert ]) 

jQuery.each(collection, callback(indexInArray, valueOfElement)) 

你有可能的原因是,他們寧願有indexInArray中。每個(第1個參數的任何想法),並作爲.grep()函數的第二個?

感謝, 布拉克ozdogan

回答

3

我不知道是否有這個一個真正的答案或沒有,但讓我們來看看功能的使用

  • .grep,處理數組的元素。該元素的索引不是處理元素所必需的。它或多或少是可選的,因此是第二個參數。

  • .each中,沒有參數是非常必要的。但是因爲可以通過函數內部的this來訪問該元素,所以該元素被設置爲第二參數是有意義的。這樣,人們不必爲了使用索引而指定兩個變量。
    如果參數的順序相反,而且您想使用索引,則必須指定元素的變量,並且您可能無法使用this,但我不確定該)。

所以最終這是一個方便的問題。

0

那麼,人們可能會說參數具有相同的順序。如果你看一下源代碼,你會看到,在grep的,回調被稱爲像這樣:

callback(elems[ i ], i)) 

,而在每個(與排列,而不是一個地圖打交道時):

var value = object[0]; 
callback.call(value, i, value) 

其中value是this對象。這種調用方法的方式用於覆蓋此值。

所以我想,使用每個的首選方式是使用this爲了引用該對象。

在我看來,這種差異並不是一件好事,因爲它會讓用戶的生活變得更加艱難。我已經檢查過,並且兩個版本都是在1.0版本中引入的,所以不能證明這是由兩種不同的觀點引起的。

相關問題