为了账号安全,请及时绑定邮箱和手机立即绑定

怎么解读Math min.apply?

怎么解读Math min.apply?

清风流光 2017-05-17 22:18:01
function min(target){ return Math.min.apply(0,target); } alert(min([1,2,3,4,5,6,]));Math.min是一个方法去掉了 () ,这是不是说明所有的方法去掉括号后都是一串函数?apply 作用是替换作用域 后面的第一个参数0是什么意思,我记得应该是this或者是arguments callee,第二个参数换成arguments 结果是NaN 这又是为什么? 
查看完整描述

1 回答

已采纳
?
千秋此意

TA贡献158条经验 获得超187个赞

因为Math.min方法不支持直接传入一个数组,必须一个个参数传入,而且每个参数必须是数字(或者能隐试转换成数字的值),只要参数里有一个值不是数字最后得出的结果就是NaN。

上面说了Math.min方法不能直接传入一个数组,所以就有了Math.min.apply(null, args);

aplly接受两个参数,第一个参数为指定当前函数调用时的this值,不过正如楼上所说你这个问题里的第一个参数并不是重点,随便什么都行,主要是为了使用apply的第二个参数,其第二个参数为一个数组(类数组),调用函数时这个数组里的每个元素都会被当成参数传入该函数,也就是相当于把这你这个数组里所有的元素都传入了 Math.min() 方法,至于为什么结果是NaN,原因在在一开头就说了,Math.min 方法的参数必须是数字,而你传入的 [1,2,3,4,5,6, ] 这一组参数,最后一项为 undefined,结果就是NaN了。

查看完整回答
2 反对 回复 2017-05-17
  • 清风流光
    清风流光
    那是不是说 apply 能把数组转化成类数组 相当于转化成单个参数 并把它的作用域附给指定函数 第一个参数不重要 它表示的是什么?
  • 千秋此意
    千秋此意
    首先并不是apply的第一个参数不重要,而是在你这条语句里apply的第一个参数不重要。。第一个参数为指定当前函数调用时的this值,如果你传的是个对象,那么你这个函数调用时作用域内的this就是指向这个对象,如果为一个数字、字符串、布尔值,那么内部的this就会指向该值的自动包装对象,如果传入的是null和undefined,那么内部的this就会指向全局对象。。apply并不能把数组转换成类数组,不过效果确实是把一个数组里的元素当成单个实参传入函数。。你再想想吧。。望采纳~
?
慕先生4543078

TA贡献52条经验 获得超38个赞

忘了说了,一般第一个参数写Math
查看完整回答
反对 回复 2017-05-17
?
慕先生4543078

TA贡献52条经验 获得超38个赞

apply方法吧,你试试第二个参数填个空的大括号,也是可以正常调用的。。。 至于为啥。。。谁知道呢,反正就是能这么用。
查看完整回答
反对 回复 2017-05-17
?
后知后觉88

TA贡献39条经验 获得超10个赞

在这个例子中 ,第一个参数随便是什么对象都行,  主要是为了实现多个值比较  也就是主要为了使用第二个参数

第二个参数  当然要和函数的形参一致才行    用arguments  就都用 arguments

不知道你明白了没....

查看完整回答
反对 回复 2017-05-17
  • 1 回答
  • 0 关注
  • 4008 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信