Javascript 为什么在Math.max上调用apply有效而在没有它的情况下则无效';T

Javascript 为什么在Math.max上调用apply有效而在没有它的情况下则无效';T,javascript,Javascript,如果您要求我获取数组的最大值,我只需执行以下操作: var nums = [66,3,8,213,965,1,453]; Math.max.apply(Math, nums); 当然,我也可以这样做: sort(函数(a,b){returna-b}.pop(nums.length) 但我必须诚实。我需要知道为什么它有效-使用.apply(数学,nums)。如果我只是这样做: Math.max(nums); 那是行不通的 通过使用apply,我将数学传递为这个,数组传递nums。但我想知道“为

如果您要求我获取数组的最大值,我只需执行以下操作:

var nums = [66,3,8,213,965,1,453];
Math.max.apply(Math, nums);
当然,我也可以这样做: sort(函数(a,b){returna-b}.pop(nums.length)

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

Math.max(nums);
那是行不通的

通过使用apply,我将数学传递为这个,数组传递nums。但我想知道“为什么”的复杂性,前者有效,后者无效。发生了什么神奇的事情


有一件基本的事情我并没有绞尽脑汁。我读过很多关于“打电话申请”的书,但很多时候,一些很酷的技巧可以像上面那样使用,我觉得我在这里遗漏了一些更深层次的东西。

正如您在这里读到的,
apply
使用给定的
this
值和作为
数组提供的参数调用函数。
apply
函数的第二个参数接受
数组
,这就是它工作的原因

而其本身需要任意数量的参数,而不是它们的数组:

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()
功能。

阅读
。apply
的功能:好的,我理解你的意思,对它已经有点熟悉了,但是我错过了,我想你澄清的是apply允许我“改变”接受的上下文。是吗?是。还要花时间阅读更多有关正在调用的函数中更改此
apply
的第一个参数的信息。