2016-12-19 94 views
2

我有以下功能,其中Math.max()未按预期工作。它总是警告正在传递的参数的第一个值。错误在哪里?Math.max()未按预期工作

function large(arr) { 
 
    alert(Math.max(arr)) 
 
} 
 

 
large(1,2,3,4,5);

+3

难道你看看[文件](https://developer.mozilla.org/en-US/docs/Web/JavaScript/参考/ Global_Objects /数学/最大)? –

+0

max不接受数组作为输入。所以Math.max(ArrayList)将返回NaN – Mahi

+0

你没有传递数组;你传递了五个独立的参数,并给第一个参数赋予名字“arr”。其他参数值只能通过'arguments'关键字访问。 –

回答

6

您传递多个参数,但你的函数只使用第一个。

在ES5之前,你可以使用函数的apply方法和arguments object

function large() { 
 
    alert(Math.max.apply(Math, arguments)) 
 
} 
 

 
large(1,2,3,4,5);

在ES6可以使用restspread operator

function large(...arr) { 
 
    alert(Math.max(...arr)) 
 
} 
 

 
large(1,2,3,4,5);

+0

为什么要应用?? ... – Mahi

+0

@Mahi它允许你调用一个函数,它有一个参数数组(或类似数组的对象),长度未知。 –

+1

应该指定它是['Function.prototype.apply()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply)在使用中,这里。 – Walf

1

你可以这样做。

如果你想使用arguments,你可以避免函数的参数。然后使用apply函数来调用Math.max

function large() { 
var _max = Math.max.apply(Math, arguments); 
alert(_max) 
}; 
large(1, 2, 3, 4, 5, 20,9000); 

DEMO