es6箭头函数和this

es6箭头函数和this

箭头函数()=>{},没有自己的this指针,this为上一层的的this指针

function(){},有自己的this指针,this指向调用时的对象

例子:

a="windowScope"
let obj1={
  a:1,
  // 向上找不到this指针,指向window
  show:()=>{console.log('obj1:',this.a)}
};

let obj2={
  a:2,
  // this为调用时确定的对象
  show:function(){console.log('obj2:',this.a)}
};

let obj3 = {
  a:3,
  // ②function有this指针,this是调用时确定
  show :function(){
    // ①向上找到function,沿用它的this
    setTimeout(()=>{ console.log('obj3:',this.a) }, 100);
  }
};

let obj4={
  a:4,
  // ②无this,继续向上找,指向window
  show :()=>{
    // ①向上找到()=>{}
    setTimeout(() => { console.log('obj4:',this.a) }, 100);
  }
};

let obj5={
  a:1,
  show:{
    a:2,
    // 向上并未能找到带有this的词法作用域,最终指向window
    show:()=>{console.log('obj5:',this.a)}
  }
};

obj1.show(); // windowScope
obj2.show(); // 2
obj3.show(); // 3
obj4.show(); // windowScope
obj5.show.show() // windowScope

继续:

let btn=document.getElementById("btn");
// 定义的时候,向上一层寻找,指向window
btn.addEventListener('click',()=>{
    console.log(this)
})

triggerClick(btn) // window

结论:

  1. 对象方法中谨慎使用箭头函数
  2. 元素的方法谨慎使用箭头函数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,664评论 0 5
  • 函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法。 上面代码检查函数l...
    呼呼哥阅读 3,476评论 0 1
  • 本文为阮一峰大神的《ECMAScript 6 入门》的个人版提纯! babel babel负责将JS高级语法转义,...
    Devildi已被占用阅读 2,027评论 0 4
  • 公交车来到的时候,我把最后的半个鸡蛋一下子塞进了嘴巴里,往垃圾桶里扔了个垃圾,就和啊瑾挤上了车子。 我一直在拍着被...
    林里叶落阅读 277评论 5 3
  • 早安, 二字本来打算醒来第一个对你说, 我发现, 空荡荡的房间只弥漫着你的香水味, 暮然回首, 忆起昨天的偶然邂逅...
    鱼泡泡儿阅读 178评论 2 5