bind,call,apply的区别
本文最后更新于:3 年前
这是一道经典的面试题了。然鹅我一直都不知道他们三者区别。。。
所以今天学习下。
首先,他们三者都是改变this指向的。
在react当中,常常看到以下场景:
1 |
|
这是一个很常见的使用方法了,假如上面
li
的点击,不通过bind
去绑定this
,那么在函数handleClick
中,this
会为undefined
。现在通过bind
去改变this
指向来避免handleClick
中的this
为空。正常来说onClick
中需要接收一个函数。所以假如用handleFn
代替handleClick
那么上面的写法就是:
1 |
|
也就是说
this.handleClick.bind(this, item.id)
这里返回的是一个函数。而它的第一个参数为
this
指向的对象,后面则为多个参数this.handleClick.bind(this, arg1, arg2, ..., argx)
跟bind
不同,call
以及apply
则是直接调用方法。而call
跟apply
之间的区别就是接收参数不一样。
1 |
|
可以从上述例子看到,
call
跟apply
都是直接调用方法。apply
将所有参数,以数组的形式放在第二个参数上;而call
则跟bind
一样排列放置参数。总结:
方式 | 返回 | 参数格式 |
---|---|---|
bind | 改变指向后的函数 | this, arg1, arg2, …, argx |
call | 无 | this, arg1, arg2, …, argx |
apply | 无 | this, [arg1, arg2, …, argx] |
参考文章:
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!