【作用域】apply、call、bind的区别

本文详细解析了JavaScript中apply、call、bind三个方法的区别及作用机制。这三种方法均可改变函数内部this的指向,适用于不同的编程场景。文章对比了它们在参数传递、执行时机及浏览器兼容性上的差异。

一、apply、call、bind三者的区别

方法:

  • Function.prototype.apply(thisArg, argArray)
  • Function.prototype.call(thisArg[, arg1[, arg2, …]])
  • Function.prototype.bind(thisArg[, arg1[, arg2, …]])

相同点:

  1. 三个方法的作用都是改变函数内部this的指向
  2. 三个方法的第一个参数都是this要指向的值
  3. 三个方法都可以传入额外的参数
  4. 非严格模式下如果,thisArg为null或undefined,则this指向window
    非严格模式下,如果thisArg为原始值(数字、字符串、布尔值),则this指向该原始值的包装对象
    严格模式下,this都指向thisArg本身;

不同点:

  1. apply和call在调用的时候,函数会立即执行,而bind会返回一个新函数
  2. apply和call在IE8及以上都支持,bind仅在IE9及以上支持
  3. Function.prototype.apply.length为2,Function.prototype.call.length和Function.prototype.bind.length的值为1

二、apply、call、bind作用机制

apply

在调用apply方法的时候将执行以下步骤:
在这里插入图片描述

call

在调用apply方法的时候将执行以下步骤:
在这里插入图片描述

bind

在调用bind方法的时候将执行以下步骤:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值