Skip to content

apply、call、bind 的区别

apply

apply 第一个参数为 this 的指向,第二个参数是一个数组,改变 this 的指向后原函数会立即执行。当第一个参数为 null 或者 undefined 的时候,默认指向 window(此方法临时改变 this 指向一次)

js
function fn(...args) {
  console.log(this, args)
}
let obj = {
  myname: '张三'
}

fn.apply(obj, [1, 2]) // 张三, [1,2]     this会变成传入的obj,传入的参数必须是一个数组;
fn(1, 2) // this指向window

fn.apply(null, [1, 2]) // this指向window
fn.apply(undefined, [1, 2]) // this指向window

call

call 方法同 apply,第一个参数也同 apply,后面传入的是一个参数列表

js
function fn(...args) {
  console.log(this, args)
}
let obj = {
  myname: '张三'
}

fn.call(obj, 1, 2) // 张三,[1,2]   this会变成传入的obj,传入的参数必须是一个数组;
fn(1, 2) // this指向window

bind

bind 方法类似于 call,但是改变 this 指向后返回一个永久改变 this 指向的函数