如果Math.max(1,3,9)返回错误(需要一个数字列表,而不是一个数组),为什么要像下面这样通过apply调用它呢?
function getMaxOfArray(numArray) {
return Math.max.apply(null, numArray);
}
getMaxOfArray([1,3,9]) //9
getMaxOfArray(1,3,9) //error我知道.apply传递了一个数组,但是为什么max函数只有在通过apply调用时才能使用它们呢?有没有一些内部转换数组=>列表?
发布于 2013-07-22 03:59:31
apply期望参数在数组中。如果只有第二种情况下的参数列表,请改用call
Math.max.apply(null,[1,3,9])
Math.max.call(null,1,3,9)What is the difference between call and apply?详细介绍了call和apply之间的区别
发布于 2013-07-22 03:59:05
您的函数只接受一个参数(numArray),而不是三个-这就是您对getMaxOfArray的调用失败的原因。如果您正在编写一行程序,则应该对一系列参数而不是数组使用call而不是apply,如下所示:
Math.max.apply(null, [1, 3, 9]);
Math.max.call(null, 1, 3, 9);对于函数,如果不希望用户传递数组,则可以将arguments对象用于可变数量的参数。下面是你该怎么做的。(请注意,我在这里仍然调用apply,因为我将用户调用的所有参数存储到一个数组中。)
function getMaxOfArguments() {
var parameters = 1 <= arguments.length ? [].slice.call(arguments, 0) : [];
return Math.max.apply(null, parameters);
}现在,您的第二个函数调用应该可以工作了:
getMaxOfArguments(1, 3, 9); // 9发布于 2013-07-22 04:04:19
Math.max的函数签名是function(arg1,arg2,arg3,...)非函数(数组)。Apply正在将输入转换为更适合Math.max的形式。
https://stackoverflow.com/questions/17776301
复制相似问题