箭头函数

箭头函数

箭头函数能让this的指向固定化

function Timer() {
  this.s1 = 0;
  this.s2 = 0;
  // 箭头函数
  setInterval(() => this.s1++, 1000);
  // 普通函数
  setInterval(function () {
    this.s2++;
  }, 1000);
}

var timer = new Timer();

setTimeout(() => console.log('s1: ', timer.s1), 3100);
setTimeout(() => console.log('s2: ', timer.s2), 3100);
// s1: 3
// s2: 0

分析:
1)第一个setInterval()中使用了箭头函数,箭头函数使this绑定定义时所在的作用域,this指向固定
2)第二个setInterval()中使用了普通函数,只想运行时的作用域 即全局对象

箭头函数转成 ES5 的代码

// ES6
function foo() {
  setTimeout(() => {
    console.log('id:', this.id);
  }, 100);
}

// ES5
function foo() {
  var _this = this;

  setTimeout(function () {
    console.log('id:', _this.id);
  }, 100);
}

箭头函数中不存在this 引用外部this
除了this,以下三个变量在箭头函数之中也是不存在的,指向外层函数的对应变量:arguments、super、new.target

箭头函数的不适合场景

const cat = {
  lives:9,
  jumps:()=>{
    this.lives--
  }
}

箭头函数中的this指向了window,静态化了
普通函数 this指向cat

需要动态this 难怪addEventListenr中不能使用箭头函数

// 这里this指向了window  会报错
let button = document.getElementById('press');
button.addEventListener('click', () => {
  this.classList.toggle('on');
});

修改为:
button.addEventListener('click', function(e) {
  this.classList.toggle('on');
});

结论:回调函数里面使用了this的不要使用箭头函数

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 基本用法 ES6 允许使用“箭头”(=>)定义函数。 如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参...
    Be_somebody阅读 580评论 1 2
  • 基本用法 ES6 允许使用“箭头”(=>)定义函数。 如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参...
    站在大神的肩膀上看世界阅读 643评论 0 8
  • 基本用法ES6 允许使用“箭头”(=>)定义函数。 如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数...
    kangaroo_v阅读 12,831评论 0 2
  • 基本用法ES6 允许使用“箭头”(=>)定义函数。 上面的箭头函数等同于: 如果箭头函数不需要参数或需要多个参数,...
    stanf1l阅读 714评论 0 4
  • 箭头函数有几个使用注意点。 (1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。 (2)不...
    晨曦诗雨阅读 1,054评论 0 0

友情链接更多精彩内容