本篇博客是作为个人自学记录,如有不足之处,请批评指正。
- call,apply,bind的作用是改变函数运行时this的指向,它们的作用相似,不同的是传参的不同和返回形式的不同。
call
-
call 方法第一个参数是要绑定给this的值,后面传入的是一个参数列表。当第一个参数为null、undefined的时候,默认指向window,即 call(obj,arguments)
-
当obj为null或者undefined时,默认指向window
apply方法
-
apply接受两个参数,第一个参数是要绑定给this的值,第二个参数是一个参数数组。当第一个参数为null、undefined的时候,默认指向window。apply(obj,arr)
-
call和apply本质上是很相似的,只是传参的形式不同,call传arguments,apply传的是数组。
-
对于什么时候该用什么方法,其实不用纠结。如果你的参数本来就存在一个数组中,那自然就用 apply,如果参数比较散乱相互之间没什么关联,就用 call。像上面的找一组数中最大值的例子,当然是用apply合理。
bind的用法
- 和call很相似,第一个参数是this的指向,从第二个参数开始是接收的参数列表。区别在于bind方法返回值是函数以及bind接收的参数列表的使用。
总结
call、apply和bind函数存在的区别:
- bind返回对应函数, 便于稍后调用; apply, call则是立即调用。在es6的箭头函数下,call和apply会失效