【js Call、apply与bind 区别】

27 篇文章 0 订阅

JavaScript 中的 Call、apply 和 bind 都是用来改变函数的执行上下文(即 this 指向)的方法,但它们之间有些区别:

  1. Call 和 apply

Call 和 apply 都是 Function.prototype 的方法。它们的作用是改变函数的 this 指向,并立即执行函数。它们的区别只在于传入参数的方式。

function greeting(name) {
  console.log(`Hello, ${name}!`,this);
}
function greeting1() {
  this.name = ''
}

greeting.call(null, 'John'); // Hello, John!,window
greeting.apply(null, ['John']); // Hello, John!,window
greeting.call(greeting1, 'John'); // Hello, John!,greeting1()
greeting.apply(greeting1, ['John']); // Hello, John!,greeting1()

他们的第一个参数就是改变this指向的关键,如上,传入其他对象或函数,this指向就发生了改变,如果传入null 就默认指定window对象

第二各参数Call 方法接收的是一个参数列表,而 apply 方法接收的是一个数组。

  1. Bind

Bind 方法也能改变函数的 this 指向,但它不会立即执行函数,而是返回一个新函数,需要调用才会执行。

function greeting(name) {
  console.log(`Hello, ${name}!`,this);
}

const greetJohn = greeting.bind(null, 'John');
greetJohn(); // Hello, John!,window

Bind 方法的第一个参数是 this 指向,后面的参数是要在调用时传入到原函数中的值。如果在调用 bind 时不传入 this 指向,那么默认为 undefined。传入null时它的this指向就是谁调用指向谁

需要注意的是,bind 方法返回的是一个新函数,如果原函数有返回值,那么绑定后的函数也会返回相同的值。

综上所述,Call 和 apply 用来改变函数的 this 指向并立即执行,而 bind 则是用来绑定函数与 this 的关系,返回一个新的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值