call apply bind 的区别

发布于 2023-10-01 00:44:34 字数 1857 浏览 27 评论 0

定义

call、apply 和 bind 是 Function 对象自带的三个方法

相同之处

改变函数体内 this 的指向;如果不指定 this,则默认指向 window(模块化中则指向模块的 this)

不同之处

call 和 apply 的区别:接受参数的方式不一样。
bind:不立即执行,复制一个新的函数,需要再次调用执行。

// call()
function.call(thisArg,arg1,arg2,...)
// apply()
function.apply(thisArg,[argumentsArray])
// bind() 拷贝一个新函数;  执行 -> bind()()
function.bind(thisArg,arg1,arg2,arg3,...)

性能

call 比 apply 的性能要好
平常可以多用 call, call 传入参数的格式正是内部所需要的格式
底层源码:
少了将 apply 第二个参数解构的过程,或者说,少了参数是否是数组/类数组的判断 可以看到算法步骤中,apply 多了 CreateListFromArrayLike 的调用,其他的操作几乎是一样的(甚至 apply 仍然多了点操作)。
从草案的算法描述来看,call 性能 > apply 性能

思考

let fun = Function.prototype.bind()

如果你以上述方法创建一个函数,那么可以发现这个 fun 函数是不具有 prototype 属性的。

let Person = function (name) {
    this.name = name;
}

参考链接
Advanced-Frontend/Daily-Interview-Question#84
https://tc39.es/ecma262/
https://tc39.es/ecma262/
https://tc39.es/ecma262/

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

蓝眸

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

qq_E2Iff7

文章 0 评论 0

Archangel

文章 0 评论 0

freedog

文章 0 评论 0

Hunk

文章 0 评论 0

18819270189

文章 0 评论 0

wenkai

文章 0 评论 0

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