为什么可以';我是否用Javascript编写[1,2,3].reduce(Math.max)?

为什么可以';我是否用Javascript编写[1,2,3].reduce(Math.max)?,javascript,functional-programming,Javascript,Functional Programming,可能重复: 使用Mozilla的Javascript 1.6数组“扩展”函数(映射、减少、过滤等),为什么以下功能可以按预期工作: var max = [1,2,3].reduce(function(a,b) { return Math.max(a,b); }); 但以下情况不起作用(它会产生NaN): 是因为Math.max是一个变量函数吗?Math.max不知道如何处理所有额外的变量函数(previousValue、currentValue、index、array)主要是最后的数组 []

可能重复:

使用Mozilla的Javascript 1.6数组“扩展”函数(映射、减少、过滤等),为什么以下功能可以按预期工作:

var max = [1,2,3].reduce(function(a,b) { return Math.max(a,b); });
但以下情况不起作用(它会产生NaN):


是因为Math.max是一个变量函数吗?

Math.max
不知道如何处理所有额外的变量
函数(previousValue、currentValue、index、array)
主要是最后的数组

[].reduce.call([1,2,3,6],function(a,b) { return Math.max(a,b); });

这可以工作并使用

等等,我明白了。。。我忘了有“额外”参数传递给传递给reduce的函数。所以max也在试图找到这些额外参数的最大值。对了,
Math.max(1[1,2,3])
NaN
如果要将数组作为
this
值传递,为什么要使用.call()?这只是一种过于复杂的方法来完成OP在问题中已经展示的内容。不完全在主题上,但如果您想轻松地将数组减少到其最大值,可以在
Math.max
上使用
.apply()
var max=Math.max.apply(null[1,2,3,4])
[].reduce.call([1,2,3,6],function(a,b) { return Math.max(a,b); });