call、apply、bind异同

73 阅读1分钟

call、apply、bind在JavaScript中都是用于改变函数执行上下文(即this的指向)的方法,但它们之间存在一些异同点。

相同点

1.目的相同

都是为了改变函数执行时的this指向。

2.参数相似

第一个参数都用于指定函数执行时的this的指向。

如果第一个参数为null或undefined,在非严格模式下,this会指向全局对象(在浏览器中通常是window);在严格模式下,this会保持为null或undefined。

不同点

1.执行方式

call、apply => 立即执行原函数。

bind => 返回一个绑定了指定this值的新函数,新函数需要手动调用。

2.传参方式

call => 后续参数逐一传递给原函数。

apply => 第二个参数是一个数组或类数组对象,数组中的元素作为参数传递给原函数。

bind => 后续参数(如果有的话)作为预先传递的参数被绑定到新函数中,新函数被调用时,这些参数会与新函数的参数合并后传递给原函数。

3.返回值

call、apply => 返回原函数调用的结果。

bind => 返回一个新的函数。

4.使用场景

call => 需要立即执行函数并改变this指向,且参数个数已知或易以参数形式传递。

apply => 与call类似,但适用于参数已经组织成数组或类数组对象的场景。

bind => 需要预先设置this指向并可能稍后执行函数的场景,或者需要实现函数柯里化(部分应用)