一个奇怪的问题,但每次我都使用jQuery.each()我想知道为什么 indexInArray
是第一个参数而不是第二个参数(第二个当前是值本身),就像 native array.forEach()
一样?
有an identical, but unanswered question对 .each()
的 API 文档也有相当多的赞成票!
我经常发现代码“作用于”值而不是索引,导致函数主体中有一个未使用的变量(这让 js(h|l)int 提示,有充分的理由我的想法)。那么,为什么值不是第一个参数?
这是早期版本中考虑不周的实现的后遗症,还是有充分的理由?
最佳答案
原因是 foreach
的第一个参数,即值,在 $.each
中不太需要,因为 jQuery 将它提供为 this
.
因此,索引似乎更有用。这是一个很好的理由。
我写“出现”,因为这并非没有危险:当值是基本类型时,this
与值不完全相同:在这种情况下,值被包装作为一个对象。
为什么危险?
原因如下:
[1, 2, 3].forEach(function(v) {
if (v===2) console.log('found!');
});
控制台输出:
found!
现在使用 jQuery:
$.each([1, 2, 3], function() {
if (this===2) console.log('found!');
});
输出是什么?
没有。
(请注意,我在 this related question 中详细介绍了导致此问题的实现。)
如今,随着人们越来越习惯标准的 javascript 函数,可能会认为采用其他顺序会更好(这是 Underscore.js 的选择)。首先提供索引的理由很好,但可能还不够好。但也许这并不重要,因为我们可能不会继续使用 $.each
,因为 foreach
已普遍可用(至少对于数组而言)。
关于javascript - 为什么 jquery 的 .each() 回调将 indexInArray 而不是 valueOfElement 作为第一个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14140523/