var arr=[1,3,6,3,7,9,2];
console.log(Math.max.apply(null,arr));
答案1
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, ...)
//欢迎加入前端全栈开发交流圈一起学习交流:864305860
在此处,使用apply的优点是在部分JS引擎中提升性能。
答案2
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(作用域链,参数)这个方法,这个函数的“参数”,接收一个数组,并且是将数组中的每个值,分开来,传递给调 补充: Javascript中Math.max.apply和Math.max的区别
Javascript中的Math.max方法可以求出给定参数中最大的数。
> Math.max('1','2','3.1','3.2')
< 3.2//欢迎加入前端全栈开发交流圈一起学习交流:864305860
> Math.min(1,0,-1)
< -1
但如果是数组,就不能这样调用了。 此时就用到了apply方法:
apply 方法 (Function) (JavaScript)
调用函数,并用指定对象替换函数的 this 值,同时用指定数组替换函数的参数。
apply([thisObj[,argArray]])
thisObj
可选。 要用作 this 对象的对象。
argArray
可选。 要传递到函数的一组参数。 巧妙地使数组也可以调用Math.max和Math.min。
> Math.max.apply(null, ['1','2','3.1','3.2'])
< 3.2
> Math.min.apply(null, [1,0,-1])
< -1//欢迎加入前端全栈开发交流圈一起学习交流:864305860
结语
感谢您的观看,如有不足之处,欢迎批评指正。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。