call(),apply(),bind()的异同点

241 阅读1分钟

call()apply()bind()作用是改变函数执行时的上下文,简而言之就是改变函数运行时的this指向

apply()

apply接受两个参数,第一个参数是this的指向,第二个参数是函数接受的参数,以数组的形式传入(伪数组/真数组)

改变this指向后原函数会立即执行,且此方法只是临时改变this指向一次

apply底层会自动遍历数组,然后按照顺序逐一传参

image.png

image.png

call()

call方法的第一个参数也是this的指向,后面传入的是一个参数列表

apply一样,改变this指向后原函数会立即执行,且此方法只是临时改变this指向一次

image.png

image.png

bind()

bind方法,第一参数也是this的指向,bind不会立即执行函数,而是返回一个修改this之后的新函数

image.png

image.png

我们来总结一下异同点

相同点:

作用一致,都是修改this指向

不同点:

(1)传参方式不同 : call是单个传参, apply是数组/伪数组传参

(2)执行机制不同 : call和apply立即执行函数, bind不会立即执行,而是返回一个修改this之后的新函数