我只是想知道是否有人知道为什么$.map和$.fn.map以翻转的顺序传递参数.是否有正当理由(例如某处的ECMA规范)或者它是否只是一个计划不周的API,由于依赖于jQuery的代码量,现在无法修复?
$.map([ 'a','b','c' ],function(){ console.log(arguments); }) // ['a',0],['b',1],['c',2] $.fn.map.call([ 'a',function(){ console.log(arguments); }) // [0,'a'],[1,'b'],[2,'c']
.each不是这样的
解决方法
这是我完全和完全投机的“答案”.
jQuery.each(),. double()和jQuery.map()都存在于版本1中.
.map()在1.2中添加.
我的猜测是他们根本没有考虑让每个方法遵循规范中的forEach. (无论如何,当时ES 5的状态是什么?)但由于某种原因,他们确实更接近$.map()的规范. (也许它的初衷主要是内部使用.)
因此,当jQuery 1.2出现时,他们认为有一个.map()方法会很好.
所以他们面临的问题是让.map()遵循$.each()和.each(),或者遵循$.map().
因为.each()特别是已经被实现为对jQuery对象可调用,所以他们认为使.map()跟随.each()比使用$.map()更加困惑.用得不多.
查看the .map()
method vs the .each()
method的源代码,可以看到.map()需要一个中间函数来翻转参数并设置该值.不知怎的,我怀疑如果他们事先计划好了,他们本来想要这样做.
同样,这是完全和完全的猜测,但如果发生类似的事情,我不会感到惊讶.
要么接受,要么离开它. ; O)