javascript - js 当中apply.bind 这种用法是怎么执行的?

查看:150
本文介绍了javascript - js 当中apply.bind 这种用法是怎么执行的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

function largestOfFour (arr) {
    return arr.map(Function.apply.bind(Math.max, null));
}

largestOfFour([[1,34],[456,2,3,44]); //[34, 456]

上面这个函数当中的Function.apply.bind 是怎样执行的,详细的过程是什么?

解决方案

obj.func() 可以通过 bind 处理成 obj.func.bind(obj)
现在 obj 表示 Math.max,func 表示 apply,那么上面那个 bind 式可以变成
Math.max.apply.bind(Math.max)

参考 Array.prototype.map()

所以 map 的 callback 的第 1 个参数是二维数组的元素,即里面的一维数组,可以作为 Math.max 的参数数组

由于 apply 在运行时,第1个参数是对象,第2个参数才是参数数组,而 map 会把当作参数数组的一维数组作为第 1 个参数传入,所以需要在 bind 的时候指定第1个参数,null 即可,Math 也行。

这一点参考 Function.prototype.bind()

所以绑定式要改成 Math.max.apply.bind(Math.max, null)

然后,Math.max.apply 其实是 Function.prototype.apply,而 Function.apply === Function.prototype.apply(不知道是不是所有环境都支持 Function.apply),所以上述绑定式就改成了

Function.apply.bind(Math.max, null)

这篇关于javascript - js 当中apply.bind 这种用法是怎么执行的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆