js是的this与箭头函数中的this

请搭配 https://zhuanlan.zhihu.com/p/57204184 使用

以下内容改编自 https://www.cnblogs.com/jeodeng/p/10658590.html

// 先给window加一个id,以便于确认之后this的指向
window.id = 0;
// 声明一个函数fn
const fn = {
  id: 1,
  say: function() {
    console.log('id:', this.id);
  },
 // 1, fn调用say,this指向fn

  sayArrow: () => {
    console.log('id:', this.id);
  },
 // 0, 箭头函数虽然定义在fn中,但fn不是作用域,作用域是指函数内部,继续往外找,到了最外层window

  say1: function() {
    setTimeout(function() {
      console.log('id:', this.id);
    }, 1000);
  },
// 0, setTimeout传入的回调方法其实是在setTimeout中执行的,没有其它对象调用该回调方法,所以回调方法的this指向window

  say2: function() {
    let that = this;
    setTimeout(function() {
      console.log('id:', that.id);
    }, 1000);
  },
// 1, that指向fn,又把fn引用传进了setTimeout回调方法

  say3: function() {
    setTimeout(() => {
      console.log('id:', this.id);
    }, 1000);
  },
/**
1, setTimeout传入了一个匿名箭头函数,相当于
say3: function() {
  var temp = () => {
      console.log('id:', this.id);
    };
    setTimeout(temp, 1000);
  }
箭头函数的this指向它的作用域,箭头函数是在say3函数中定义的,say3的this指向调用它的fn
**/

  say4: () => {
    setTimeout(() => {
      console.log('id:', this.id);
    }, 1000);
  },
// 0, 基于上面的解释,say4是在fn中定义的,fn是对象,不是say4的作用域,所以继续往上,到达window

  say5: () => {
    setTimeout(function() {
      console.log('id:', this.id);
    }, 1000);
  },
};
// 0,解释等同于 say1
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 箭头函数 1.定义对象和方法 JS 中对象方法的定义方式是在对象上定义一个指向函数的属性,当方法被调用的时候,方法...
    ThunderChen阅读 1,688评论 0 2
  • 一、前言 只有光头才能变强 认识我的朋友可能都知道我这阵子去实习啦,去的公司说是用SpringCloud(但我觉得...
    Java3y阅读 4,804评论 6 163
  • 作者:李旺成 时间:2016年4月3日 “Android MVP 详解(下)”已经发布,欢迎大家提建议。 MVP ...
    diygreen阅读 129,358评论 85 1,320
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 7,998评论 0 4
  • 公元:2019年11月28日19时42分农历:二零一九年 十一月 初三日 戌时干支:己亥乙亥己巳甲戌当月节气:立冬...
    石放阅读 7,497评论 0 2

友情链接更多精彩内容