call、apply和bind都是JavaScript中的函数方法,它们的作用是在函数调用时动态地改变函数的上下文,也就是this的指向。它们的区别主要有以下几点:
call和apply都是立即执行函数,而bind是返回一个新函数,不会立即执行。
call和apply的第一个参数都是指定的this对象,后面的参数都是传递给函数的。但是call是一个个参数列表,而apply是一个数组。
bind的第一个参数也是指定的this对象,后面的参数可以分多次传入,也就是柯里化。
举个例子:
function add(a, b) {
return this.x + a + b;
}
var obj = {x: 10};
var result1 = add.call(obj, 1, 2); // 13
var result2 = add.apply(obj, [1, 2]); // 13
var result3 = add.bind(obj)(1, 2); // 13
var result4 = add.bind(obj, 1)(2); // 13