call、apply、bind的用法

94 阅读1分钟

以这个函数add为例

function add(a,b){
	return a + b
}

call

call 是函数的正常调用方式,并指定上下文 this。

  • 使用call调用 add.call(undefined,6,7) // 13

apply

apply 的作用和 call 一样,只是在调用的时候,传参数的方式不同。

区别是 apply 接受的是数组参数,call 接受的是连续参数。

  • 使用apply调用 add.apply(add,[6,7]) // 13

bind

bind 接受的参数跟 call 一致,只是 bind 不会立即调用,它会生成一个新的函数,你想什么时候调就什么时候调。

可以绑定this不被改变

function f1(p1,p2){
	console.log(this,p1,p2)
}
let f2 = f1.bind({name:'bbt'})
// 那么f2就是f1绑定this之后的新函数
f2() // 等价于f1.call({name:'bbt'})

bind 还可以绑定其他参数

let f3 = f1.bind({name:'bbt'},'hi')
f3() 等价于 f1.call({name:'bbt'},hi)