JavaScript中的call,apply,bind的区别
共性
call,apply,bind都是为显示改变this的指向
不同点
-
call和apply的不同主要在参数上。
call和apply的第一个参数都是要让this指向的对象。
call的第二个及以后的所有参数是被改变this指向的函数的参数列表。
apply的第二参数是一个数组,数组中的内容是函数的参数列表。
function foo(a, b) { console.log(this) console.log(a + b) } let a = { name: "li" } foo.call(a, 1, 1) //{ name: "li" } 2 foo.apply(a, [1, 1]) //{ name: "li" } 2
-
call和bind的不同在于进行对象绑定后是否执行,传参一致。
call函数会立即执行。
bind函数不会立即执行而是返回一个新的函数,返回的这个新的函数的this指向一直是你绑定的那个对象且它的参数是固定的不可改变,一般用在点击事件上,在点击时给这个事件绑定this。
function foo(a, b) { console.log(this) console.log(a + b) } let a = { name: "li" } let c = foo.bind(a, 1, 2) c() //{ name: "li" } 3 c(1, 1) //{ name: "li" } 3,重新传参无作用