函数中飘忽不定的this

JS函数中飘忽不定的this

在普通函数中的this

var num = 1;
var obj = {
  num: 2,
  fn: function() {
    console.log(this.num)
  }
}

// 直接调用obj对象的fn函数,输出结果为2
obj.fn();

// 将obj对象赋值给一个新的变量
// 再由新变量调用fn函数,输出结果为2
var newObj = obj;
newObj.fn(); // 2

// 将obj对象的fn函数赋值给一个新变量
// 在调用该变量函数,输出结果为1
var wObj = obj.fn;
wObj(); // 1

从上面的例子中可以发现,在JS的普通函数中this的指向始终执行的是该函数的执行者

  • obj.fn()的执行者是obj对象
  • newObj.fn()的执行者是newObj变量也就是obj对象
  • wObj()的执行者是当前JS文件所在的窗口,也就是window对象

神奇的箭头函数

在ES6中提出的箭头函数,除了简化代码以外最重要就是可以帮助开发者更好的确定当前函数中的this指向。由于箭头函数本身没有this,所以在箭头函数内部的this使用的是父级作用域下的this

var obj = {
  val: 1,
  f1: function() {
    console.log(this.val); // 1
    console.log(this); // {val: 1, f1: f, f2: f}
  },
  f2: () => {
    console.log(this.val); // undefined
    console.log(this);	// window
  },
  f3: function() {
    return () => {
      console.log(this.val); // 1
    }
  }
}

obj.f1();
obj.f2();
obj.f3()();
  • obj.f1()
    • 由于f1函数是一个普通函数,所以在f1中的this指向的是它的执行者
  • obj.f2()
    • 由于f2函数是一个箭头函数,所以在f2中的this指向的是obj.f2()的父级也就是obj.f2()的执行者window对象
  • obj.f3()()
    • f3函数会返回一个箭头函数,此时如果立即执行返回的箭头函数,那么的this指向的就是obj.f3()中的this。由于f3是一个普通函数,他的this指向的是obj,所以在控制台的输出结果是1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值