0

JavaScript Ninja的秘密中有一个示例,它提供了以下代码来绕过 JavaScript 的Math.min()函数,该函数需要一个可变长度的列表。

Example: Math.min(1,2,3,4,5);

但是,如果你有一个问题list: [1,2,3,4,5],因为你宁愿不必遍历列表,跟踪当前的最小值。

书中说使用以下代码来解决这个问题。

function smallest(arr) {
   return Math.min.apply(Math, arr);   
}

alert(smallest([1,2,3,4,5,6,-33]));

Math.min.apply(Math, arr)引擎盖下会发生什么?

4

3 回答 3

2

.apply方法“调用具有给定this值和作为数组(或类似对象的数组)提供的参数的函数。”

所以基本上它就像你在直接调用函数时将数组的每个项目作为单独的参数传递一样。

第一个参数.apply()设置this函数要使用的值,因此您的示例通过Math,因此它的工作方式与您直接调用它时一样Math.min(...)

请注意,您可以对任何函数执行相同的操作:

function someFunc(a,b,c,d) { ... }

someFunc(1,2,3,4);
// or
someFunc.apply(null, [1,2,3,4]);
于 2013-02-09T21:53:43.480 回答
1

允许您在apply给定实例上调用方法并将参数作为数组提供。所以当你写

Math.min.apply(Math, arr);   

您正在调用类min上的方法并作为参数Math 传递。arr

于 2013-02-09T21:53:54.560 回答
1

根据 MDN 文档Function.prototype.apply

使用给定的 this 值和作为数组(或类似对象的数组)提供的参数调用函数。

于 2013-02-09T21:53:55.437 回答