25

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,但对我来说这似乎是一个严重的不一致。

是否有我遗漏的模式或者这只是随机的?应该解决这个问题还是我应该闭嘴并记住它们?

4

4 回答 4

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这只是您想要的。

于 2010-08-31T19:14:53.683 回答
7

这有时也让我感到沮丧——$.each这是我总是搞砸的。

我认为这是由于不同的人/团队在框架的不同部分工作。它是一个社区驱动的框架,所以可能没有人很早就发现它,现在这个框架已经如此广泛传播,他们无法在不破坏 Internet 上 35% 的站点的情况下修复它。

我不认为它会被修复——至少这是我的观点/态度。我只需要记住它们并希望最好!

于 2010-08-31T19:16:17.020 回答
2

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

于 2010-08-31T19:14:12.600 回答
2

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

一个警告:$.map()切换回调参数的顺序 [当与$().map,$each()和相比时$().each()]。这样做是为了匹配.map()ECMAScript 5 中提供的原生 JavaScript 方法。

于 2016-11-17T16:07:07.130 回答