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

Ben*_*anc 3 javascript foreach jquery loops

一个奇怪的问题,但每次我使用jQuery.each()时我都想知道为什么它indexInArray是第一个参数而不是第二个参数(第二个当前是值本身),就像本机一样array.forEach()

一个相同的,但没有答案的问题,API文档.each()也有相当多的赞成!

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

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

Den*_*ret 6

原因是,jQuery提供的第一个参数foreach值不太需要.$.eachthis

因此,该指数似乎更有用.这是一个很好的理由.

我写"出现",因为这并非没有危险:this与值为基本类型时的值不完全相同:在这种情况下,值被包装为对象.

为什么危险?

原因如下:

[1, 2, 3].forEach(function(v) {
    if (v===2) console.log('found!');
});
Run Code Online (Sandbox Code Playgroud)

控制台中的输出:

found!
Run Code Online (Sandbox Code Playgroud)

现在使用jQuery:

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

什么输出?

没有.

(请注意,我在此相关问题中详细说明了导致此问题的实现.)

今天,随着人们越来越习惯标准的javascript函数,可能会认为拥有其他顺序会更好(这是Underscore.js的选择).首先提供指数的原因很好,但可能还不够好.但也许这并不重要,因为我们可能不会继续使用$.each现在foreach一般可(至少对于阵列).