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

bra*_*rad 25 api jquery 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.grep,jQuery.map)中,元素首先出现.我知道api现在已经确定了,但这对我来说似乎是一个严重的不一致.

有没有我缺失的模式或者这只是随机的?这应该修复还是我应该闭嘴并记住它们?

Yan*_*hon 8

这不是完全随机的.因为:

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

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

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

  • 这并没有真正回答任何问题 - 索引在某些情况下比元素更重要,而在其他情况下则不然.并且"this"与第一个参数不一致.例如:`$("selector").each(function(index,el){// el === this})` (3认同)
  • 与选择器和上下文相同的事情.$(myselector,mycontext)上下文是可选的,这就是为什么它是第二个. (2认同)
  • @YanickRochon我不认为这对"简单"这个词的任何简单定义都是"简单的".我们还必须记住哪些*特定的*方法绑定对`this`有用的东西(更不用说那个项目是什么)? (2认同)

Dav*_*ter 7

有时候这让我很沮丧 - 这$.each是我经常搞砸的那个.

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

我不认为它会被修复 - 至少这是我的意见/态度.我只需要将它们归于记忆并希望最好!