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

发布于 2022-09-02 19:32:21 字数 218 浏览 21 评论 0

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

柠栀 2022-09-09 19:32:21

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

参考 Array.prototype.map()

clipboard.png

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

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

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

clipboard.png

所以绑定式要改成 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)

稚然 2022-09-09 19:32:21

相当于这样:

function largestOfFour(arr) {
    return arr.map(function() {
        return Math.max.apply(null, arguments[0]);
    });
}

具体的难点,就在apply上了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文