为什么jQuery的回调参数不一致?

时间:2010-08-31 19:08:49

标签: jquery api method-signature

jQuery中的一个常见模式是一种方法,它接受一个回调,该回调在该数组中传递一个数组元素及其索引。然而,似乎完全随机的是哪个论证首先出现。例如,来自http://api.jquery.com的jQuery文档:

  • jQuery.each( collection, callback(indexInArray, valueOfElement) )
  • .each( function(index, Element) )
  • jQuery.map( array, callback(elementOfArray, indexInArray) )
  • .map( callback(index, domElement) )
  • jQuery.grep( array, function(elementOfArray, indexInArray), [ invert ] )
  • .filter( function(index) )

在三种情况下(jQuery.each.each.map),索引排在第一位。在另外两个(jQuery.grepjQuery.map)中,元素首先出现。我知道api现在已经确定了,但这对我来说似乎是一个严重的不一致。

我是否缺少某种模式或者这只是随机的?这应该修复还是我应该闭嘴并记住它们?

4 个答案:

答案 0 :(得分:8)

这不是完全随意的。因为:

$.map( $('selector'), function(el, index) { /* element (DOMElement) is first, index optional */ } );
$('selector').map(function(index) { /* 'this' (DOMElement) is first.... index optional */ });

看模式?第二个示例有第二个参数,但只是方便传递,它与this相同。

模式是第一个参数总是比第二个更“重要”,最后一个参数应该是最不重要的(“更可选”)。因此,如果您只需要一个参数,则无需指定所有最不重要的参数。在$(...).each的情况下,通常你甚至不需要任何论证,因为this只是你想要的。

答案 1 :(得分:7)

有时让我感到沮丧 - $.each是我经常陷入困境的人。

我认为这是由于不同的人/团队在框架的不同部分工作。它是一个社区驱动的框架,所以没有人可能很早就抓住它,现在框架如此广泛,他们无法修复它而不会破坏互联网上所有网站的35%。

我认为不会修复 - 至少这是我的意见/态度。我只需要让他们记住并希望最好!

答案 2 :(得分:2)

由于Javascript允许您忽略您未使用的参数(即,您可以定义一个只接受一个参数的回调函数,即使它将被调用两个参数),通常,第一个参数是您正在使用的参数最有可能使用。 (实际上,this变量通常是您最有可能使用的数据项,后跟第一个参数,等等。

答案 3 :(得分:1)

根据https://learn.jquery.com/using-jquery-core/iterating/

  

警告:$.map()切换回调参数的顺序[与$().map$each()$().each()进行比较。   这样做是为了匹配原生JavaScript .map()方法   在ECMAScript 5中提供。