javascript 浏览器中函数的 this 指向

本文探讨了JavaScript中函数的this关键字的指向问题。针对function函数,this在其被调用时根据调用时的对象环境确定;而对于箭头函数,this在定义时就已经根据其所在的作用域固定。此外,还提到了with语法中this的特殊指向。
摘要由CSDN通过智能技术生成
调用方法function函数箭头函数
全局中调用this 指向 window 对象this 指向 window 对象
函数作为对象的方法,使用对象在全局中调用函数this 指向调用方法的对象this 指向 window 对象
构造函数this 指向 new 创建出的对象箭头函数不能作为构造函数
bind, apply, callthis 指向新绑定的对象this 保持原先的指向 (箭头函数的this指向是固定的)
  1. 上边是比较笼统的说法,针对于最简单的function或箭头函数。
  2. 当函数是比较复杂的嵌套使用时,应该根据以下的方法进行具体判断。
    (1) 对于function函数,this 是一个动态的概念,当它所在的函数被调用的时候才能确定,此时的 this 是它被调用时所处的对象环境。
    (2) 对于箭头函数,this 则是在定义时便确定,得看函数被定义时所在的具体作用域。
  3. 补充:with语法中的this指向
x = 1;
var app = {
  x: 0,
  fn1: function () {
    console.log(this.x)
  },  // 0
  fn2: function () {
    return function () {
      console.log(this.x)
    }
  },  // 1
  fn3: function () {
    x = 2;
    function fn() {
      console.log(this.x)
    }
    return fn()
  },  // 2
  fn4: function () {
    return {
      x: 3,
      fn: function () {
        console.log(this.x)
      }
    }
  },  // 3
  fn5: function () {
    setTimeout(function () {
      console.log(this.x)
    }, 10)
  },  // 1
  fn6: function () {
    setTimeout(() => {
      console.log(this.x)
    }, 20)
  },  // 0
  fn7: function () {
    setTimeout(function () {
      console.log(this.x)
    }.bind(this), 30)
  },  // 0
  fn8: () => {
    setTimeout(() => {
      console.log(this.x)
    }, 40)
  }
}   // 1
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值