如果你让我获得阵列的最大值,我会这样做:
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。但我想知道第一个有效的“为什么”的复杂性,后者却没有。发生了什么魔法?
有一些基本的东西,我没有缠绕我的大脑。我读了很多关于“打电话和申请”的内容,但很多时候可以像上面那样有一些很酷的技巧,而且我觉得我在这里缺少了更深层的东西。
答案 0 :(得分:7)
正如您在此处可以阅读Function.prototype.apply,apply
调用具有给定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()
函数。