为什么jQuery.each()和jQuery.grep()具有不同的参数顺序?

为什么jQuery.each()和jQuery.grep()具有不同的参数顺序?,jquery,parameters,Jquery,Parameters,我注意到,jquery中.each()的回调函数和.grep()函数的参数顺序有所不同 jQuery.grep( array, function(elementOfArray, indexInArray), [ invert ] ) jQuery.each( collection, callback(indexInArray, valueOfElement) ) 您知道他们喜欢将indexInArray作为.each()中的第一个参数和.grep()函数中的第二个参数的可能原因吗 谢谢, b

我注意到,jquery中.each()的回调函数和.grep()函数的参数顺序有所不同

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

jQuery.each( collection, callback(indexInArray, valueOfElement) )
您知道他们喜欢将indexInArray作为.each()中的第一个参数和.grep()函数中的第二个参数的可能原因吗

谢谢,
burak ozdogan

我不知道是否有真正的答案,但让我们看看函数的用法:

  • .grep
    中,处理数组的一个元素。处理元素时不需要此元素的索引。它或多或少是可选的,因此是第二个参数

  • .each
    中,实际上不需要任何参数。但是,由于可以通过函数内部的
    this
    访问元素,因此将元素设置为第二个参数是有意义的。这样,不必只指定两个变量就可以使用索引。
    如果参数顺序相反,并且您想要使用索引,那么您必须为元素指定一个变量,并且您可能无法再使用
    这个
    (但我不确定)


因此,最终这是一个方便的问题。

好吧,有人可能会说,参数的顺序是相同的。如果查看源代码,您将看到在grep中,回调的调用方式如下:

callback( elems[ i ], i ) )
而在每种情况下(处理数组而不是映射时):

其中,值是此对象的
。这种调用方法的方式用于重写该方法的值

所以我想,使用each的首选方法是使用
this
来引用对象

在我看来,这种差异不是一件好事,因为它让用户的生活更加艰难。我已经检查过了,两个版本都是在1.0版本中引入的,所以不能证明这是由两种不同的观点引起的

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