js中apply和Math.max()函数的问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js中apply和Math.max()函数的问题?相关的知识,希望对你有一定的参考价值。

var arr=[1,3,6,3,7,9,2];
console.log(Math.max.apply(null,arr));
一直搞不懂为什么这样可以算出一个数组的最大值?一直想不明白,请js高手指教一下。

Math.max()方法,支持传递多个参数,比如:Math.max(1,4,2,3,7,5,6)

但是它不支持直接传递一个数组作为参数,比如:Math.max(new Array(1,4,2,3,7,5,6))。

这里,只要我们有方法把数组,一个一个拆分开来,传递到Math.max()方法中,就实现了传递数组的方法。

所有函数都有apply(作用域链,参数)这个方法,这个函数的“参数”,接收一个数组,并且是将数组中的每个值,分开来,传递给调用函数。所以就实现了传递一个数组,取得最大值的方法。
参考技术A Function.apply()是JS的一个OOP特性,一般用来模拟继承和扩展this的用途,对于上面这段代码,可以这样去理解:

XXX.apply是一个调用函数的方法,其参数为:apply(Function, Args),
Function为要调用的方法,Args是参数列表,当Function为null时,默认为上文,

Math.max.apply(null, arr)

可认为是
apply(Math.max, arr)
然后,arr是一个参数列表,对于max方法,其参数是若干个数,即
Math.max(a, b, c, d, ...)
当使用apply时,把所有参数加入到一个数组中,即
arr = [a, b, c, d, ...]
代入到原式,
Math.max.apply(null, [a, b, c, d, ...])
实际上等同于
Math.max(a, b, c, d, ...)
在此处,使用apply的优点是在部分JS引擎中提升性能。本回答被提问者和网友采纳

以上是关于js中apply和Math.max()函数的问题?的主要内容,如果未能解决你的问题,请参考以下文章

Math.min() / Math.max() 使用方法

返回数组中的最大值,var arr = [2, 4, 6, 8, 5, 0]; alert(Math.max.apply(this, arr));

JavaScript中Math.max.apply()和Math.max()的区别

取最大值(最小值)简介代码

js中apply和call 具体实例

js 使用Math函数取得数组最大最少值