call apply bind 的区别
定义
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论