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值和初始参数的函数,不会立即执行。