bind是异步代码,改变后不会立即执行;而是返回一个新的函数。
call和apply是改变后页面加载之后就立即执行,是同步代码。
call 和 apply 的相似点:
- 两者都是用来调用函数的方法。
- 它们都允许你显式地设置函数的
this
值(即执行函数时的上下文)。 - 它们都可以传递参数给函数。
call 的用法:
call
方法接收一个函数调用时的this
值和一个参数列表(参数列表可以是任意数量的参数)。- 语法:
function.call(thisArg, arg1, arg2, ...)
。 thisArg
是在函数执行时作为this
使用的对象。-
function greet(name) {return `Hello, ${name}! I am ${this.role}.`; }const person = { role: 'ass' }; console.log(greet.call(person, 'Tom')); // 输出:Hello, Tom! I am ass.
apply 的用法:
apply
方法与call
类似,但它接收的参数列表是一个数组(或类数组对象)。- 语法:
function.apply(thisArg, [argsArray])
。
function greet(name) {return `Hello, ${name}! I am ${this.role}.`;
}const person = { role: 'assistant' };
console.log(greet.apply(person, ['Bob']));
bind 的用法:
bind
方法不会立即调用函数,而是返回一个新的函数,称为绑定函数。这个绑定函数在调用时会以指定的this
值和初始参数调用原始函数。- 语法:
function.bind(thisArg, arg1, arg2, ...)
。
- 调用时机:
call
和apply
立即调用函数,而bind
返回一个函数,稍后可以调用。 - 参数传递:
call
和apply
的参数传递方式不同,call
是逐个传递,apply
是通过数组传递。 - 返回值:
call
和apply
直接执行函数并返回执行结果,而bind
返回一个绑定了指定this
值和初始参数的函数,不会立即执行。