JavaScript的数组映射原型有点closures吗?

我正在玩JavaScript的数组原型地图,我不明白为什么我得到以下值:

console.log( [1,2,2,5,6].map(function(a,b){ return a+b; }) ); /*This returns [ 1, 3, 4, 8, 10 ]*/ 

上面的代码不应该返回[1,3,4,7,11]?

这是另一个片段,它显示数组中的元素是按顺序添加的,至less我相信是正确的。

 console.log( [1,2,3,4,5,6].map(function(a,b){ return a+b; }) ); /*[ 1, 3, 5, 7, 9, 11 ]*/ 

这只是一个奇怪的问题,更多的是为什么第一个代码片段似乎。

总结一下:

  [1, 2, 2, 5, 6] // Your values + [0, 1, 2, 3, 4] // Indices ----------------- [1, 3, 4, 8,10] // Result 
  [1, 2, 3, 4, 5, 6] // Your values + [0, 1, 2, 3, 4, 5] // Indices -------------------- [1, 3, 5, 7, 9,11] // Result 

结果是正确的。

我认为你是reduce map混淆:

 var arr = []; [1,2,2,5,6].reduce(function(a,b){ arr.push(a+b); return b; }, 0); arr; // [1, 3, 4, 7, 11] 
  [0, 1, 2, 2, 5] // Values returned in previous iteration + [1, 2, 2, 5, 6] // Your values ----------------- [1, 3, 4, 7,11] // Result 

这是因为地图将第一个参数的值和第二个参数的值传递给你。 所以,你要添加的是:1 + 0,2 + 1,2 + 2,5 + 3等

a值是数组中的值:1,2,2,5,6

您的b值实际上是一个索引,而不是数组中的值:0,1,2,3,4

所以第一个参数'a'是value ,'b'是index 。 所以加在一起只显示了核心价值。 所以'a'包含[1, 2, 2, 5, 6] ,'b'包含[0, 1, 2, 3, 4]