bind返回绑定this和预设参数的新函数,不立即执行;call和apply立即执行,call传参逐个列出,apply以数组形式传参。
JavaScript 中的 bind、call 和 apply 都是用来**改变函数内部 this
指向**的方法,但它们的调用方式和返回结果不同。理解三者区别,是掌握 JS 执行上下文和函数式编程的关键。
bind 会创建一个新函数,把原函数的 this 永久绑定到指定对象,并可预设部分参数(柯里化)。调用时才真正执行。
fn.bind(thisArg, arg1, arg2, ...)
this 和部分参数的新函数例如:
const user = { name: 'Alice' };call 立即调用函数,并将 this 指向第一个参数指定的对象,其余参数按顺序依次传入。
fn.call(thisArg, arg1, arg2, ...)
例如:
const arrLike = { 0: 'a', 1: 'b', length: 2 };apply 和 call 功能一致,只是参数接收方式不同:它把第二个参数作为数组(或类数组)一次性传入。
fn.apply(thisArg, [arg1, arg2, ...])
例如:
const numbers = [3, 7, 1];相同点:都能显式控制函数调用时的 this;
不同点:
call 和 apply 立即执行... 替代 apply 大部分用途,如 Math.max(...numbers)