Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么jquery';s.each()回调的第一个参数是indexInArray,而不是valueOfElement?_Javascript_Loops_Foreach_Jquery - Fatal编程技术网

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也这么做。