为什么jquery的.each()回调将indexInArray作为第一个参数而不是valueOfElement?

时间:2013-01-03 14:10:07

标签: javascript loops foreach jquery

一个奇怪的问题,但每次我使用jQuery.each()时,我想知道为什么indexInArray是第一个参数而不是第二个参数(第二个当前是值本身),就像本地{{1} }}?

array.forEach()的API文档中,an identical, but unanswered question有大量赞成票!

通常,我发现代码“作用于”值而不是索引,导致函数体中的未使用变量(这使得js(h | l)int抱怨,有充分的理由我的看法)。那么,为什么价值不是第一个参数?

这是否是早期版本中经过深思熟虑的实现的宿醉,还是有充分的理由呢?

1 个答案:

答案 0 :(得分:6)

原因是foreach$.each的第一个参数,this中较少需要,因为jQuery将其作为this提供。

因此,索引似乎更有用。这是一个很好的理由。

我写“出现”,因为这并非没有危险:[1, 2, 3].forEach(function(v) { if (v===2) console.log('found!'); }); 与值为基本类型时的值不完全相同:在这种情况下,值被包装为对象

为什么这很危险?

原因如下:

found!

控制台中的输出:

$.each([1, 2, 3], function() {
    if (this===2) console.log('found!');
});

现在使用jQuery:

$.each

输出是什么?

没有

(请注意,我在this related question详细说明了导致此问题的实现。)

今天,随着人们越来越习惯标准的javascript函数,可能会认为拥有其他顺序会更好(这是Underscore.js的选择)。首先提供指数的原因很好,但可能还不够好。但也许这并不重要,因为我们可能不会继续使用foreach,因为{{1}}通常是可用的(至少对于数组而言)。