一、call、apply、bind的区别
这三个方法都是用来改变函数中this指向的。其中call和apply作用完全一样
相同点
都可以改变 this 的指向,传入的第一个参数都是绑定 this 的指向
。
本质都是为了改变函数运行时的执行上下文,使得函数在执行过程中的 this 值得到绑定并且传入指定的参数。
这样可以在特定的环境中调用函数,扩展函数的灵活性和适用性。
在非严格模式中,如果第一个参数是 nul 或者 undefined,会把全局对象 window 作为 this 的值。
在严格模式中,null 就是 null,undefined 就是 undefined
·apply
apply
接受两个参数,第一个参数指定了函数体内 this 对象的指向,第二个参数为一个带下标的集合,这个集合可以为数组,也可以为类数组。
类数组:
1、对象本身可以存取属性
2、对象的length属性课读写
applay(obj,[param1、param2、param3······])
参数说明:
obj:指定的对象
param:指定的对象中所带有的参数
注:参数使用数组包含起来。
扩:在不传入参数的情况下,call(obj)和apply(obj)的作用是一样的;
·call
call
接受多个参数,第一个参数指定了函数体内this对象的指向,从第二个参数开始的参数依次传入函数体内
call(obj,param1,param2,param3······)
参数说明:
obj:指定的对象
param:指定的对象中所带有的参数
注:参数之间用逗号隔开。
·bind
bind
的参数与call一致,但是bind不会调用函数,而是返回一个新的函数
bind(obj,param1,param2,param3······)
参数说明:
obj:指定的对象
param:指定的对象中所带有的参数
注:参数之间用逗号隔开【和call使用语法一致】
二、使用场景
1、call和apply绑定完this会立即调用当前的函数,而bind绑定完this不会立即调用当前函数,而是将函数返回。
2、call和apply通常用作绑定完立即执行的函数中,而bind通常用来作用在回调函数中定义。