Javascript功能混乱

时间:2014-12-26 12:35:04

标签: javascript

首先,抱歉没有具体的标题。我不知道怎么称呼它。

好的,这是我的问题。

我将在这里使用Javascript的reduce函数。

我知道"减少"功能定义如下

function reduce(array, combine, start) {
  var current = start;
  for (var i = 0; i < array.length; i++)
    current = combine(current, array[i]);
  return current;
}

嗯,我不明白的是这个。

为什么

[1, 2, 3, 4].reduce(function(a, b) {
  return a + b;
}, 0);

reduce([1, 2, 3, 4], function(a, b) {
  return a + b;
}, 0);

返回&#34; 10&#34;?

的相同结果

我知道这个功能是如何运作的。我只是不明白为什么

  • xx.functionABC(参数2,参数3)

  • 相同
  • functionABC(参数1,参数2,参数3)

感谢大家的回复!


感谢所有的评论和答案!

我没有先用其他方法检查(或者不应该尝试使用内置函数),我觉得很愚蠢。

2 个答案:

答案 0 :(得分:2)

第一个代码段正在使用Array.prototype.reduce,第二个代码段正在使用您的自定义reduce功能。

它们碰巧实现的大致相同,因此给出相同的结果。

以下是它们如何不同的示例。 Array.prototype.reduce将其他参数传递给combine回调,即当前数组索引,以及对数组本身的引用。你的函数没有传递这些参数。

&#13;
&#13;
function reduce(array, combine, start) {
  var current = start;
  for (var i = 0; i < array.length; i++)
    current = combine(current, array[i]);
  return current;
}

function foo(a, b, i) { return a + b * i; };

console.log([1, 2, 3, 4].reduce(foo, 0));

console.log(reduce([1, 2, 3, 4], foo, 0));
&#13;
&#13;
&#13;

(有关结果,请参阅浏览器的开发者控制台。)

答案 1 :(得分:0)

js中有一个方法Array.prototype.reduce()。这意味着方法属于Array.prototype。但是没有简单的函数reduce()。可能你会使用一些库来提供它。