为什么调用应用于Math.max工作,没有它没有

时间:2013-08-31 08:59:29

标签: javascript

如果你让我获得阵列的最大值,我会这样做:

var nums = [66,3,8,213,965,1,453];
Math.max.apply(Math, nums);

当然,我也可以这样做:     nums.sort(function(a,b){return a - b} .pop(nums.length);

但我必须诚实。我需要知道为什么有效 - 使用.apply(数学,数字)。如果我这样做了:

Math.max(nums);

这不起作用。

通过使用apply,我传入Math作为这个 - 以及数组的nums。但我想知道第一个有效的“为什么”的复杂性,后者却没有。发生了什么魔法?

有一些基本的东西,我没有缠绕我的大脑。我读了很多关于“打电话和申请”的内容,但很多时候可以像上面那样有一些很酷的技巧,而且我觉得我在这里缺少了更深层的东西。

1 个答案:

答案 0 :(得分:7)

正如您在此处可以阅读Function.prototype.applyapply调用具有给定this值的函数和以array提供的参数。因此apply函数的第二个参数接受arrays,这就是它的工作原理。

虽然Math.max()本身期望任意数量的参数不是它们的数组:

Math.max(66,3,8,213,965,1,453) //will work
Math.max([66,3,8,213,965,1,453]) //will not work

通常,您将使用apply来调用具有动态参数的函数(例如,用户生成的),您不知道参数的数量。另一方面,如果您有一定数量的参数,那么您可以轻松地将它们提供给Math.max()函数。