Javascript 为什么jquery';s.each()回调的第一个参数是indexInArray,而不是valueOfElement?
这是一个奇怪的问题,但每次使用时,我都想知道为什么Javascript 为什么jquery';s.each()回调的第一个参数是indexInArray,而不是valueOfElement?,javascript,loops,foreach,jquery,Javascript,Loops,Foreach,Jquery,这是一个奇怪的问题,但每次使用时,我都想知道为什么indexInArray是第一个参数,而不是第二个参数(第二个当前是值本身),就像本机array.forEach() 对于。each()的API文档也有相当数量的投票 通常情况下,我会发现代码“作用于”值而不是索引,从而导致函数体中出现未使用的变量(这使得js(h | l)int抱怨,我认为这是有道理的)。那么,为什么值不是第一个参数呢 这是早期版本中考虑不周的实现遗留下来的问题,还是有很好的原因?原因是foreach的第一个参数值在$中不太需要
indexInArray
是第一个参数,而不是第二个参数(第二个当前是值本身),就像本机array.forEach()
对于。each()
的API文档也有相当数量的投票
通常情况下,我会发现代码“作用于”值而不是索引,从而导致函数体中出现未使用的变量(这使得js(h | l)int抱怨,我认为这是有道理的)。那么,为什么值不是第一个参数呢
这是早期版本中考虑不周的实现遗留下来的问题,还是有很好的原因?原因是
foreach
的第一个参数值在$中不太需要。jQuery提供的每个都是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!');
});
输出是什么
没什么
(请注意,我在中详细介绍了导致此问题的实现。)
如今,随着人们越来越习惯于使用标准javascript函数,人们可能会认为使用其他顺序会更好(这是一种选择)。首先提供索引的理由很好,但可能还不够好。但这可能并不重要,因为我们可能不会继续使用$。现在foreach
已经普遍可用(至少对于数组是如此)。这是他们的API,他们可以让它返回他们想要的任何内容。在这一点上,向后兼容可以防止任何更改。是的,我完全明白,我只是想知道在第一个例子中,决策背后的原因是什么。在大多数情况下,while
或for
循环比这两种方法都快,所以如果您不喜欢它们,考虑如果你真的需要它们。但是<代码>这个< /代码>的行为完全不同(因为它封装了一个对象中的任何值)。此外,我发现自己在回调中经常使用jQuery.each
和jQuery.proxy
,因此这个
不是特别有用。Re:“今天,随着人们越来越习惯于使用标准javascript函数,人们可能会认为使用其他顺序会更好(这是下划线.js的选择)。“-mootools也这么做。