ES6-你不知道的箭头函数

释放双眼,带上耳机,听听看~!

  一谈到ES6的箭头函数,大家可能想到的优点就是语法更简洁,因为去掉了return、function、{}等输入。

  但是设计者果真就是出于简洁的目的推出的箭头函数吗?显然不是。

  => 箭头函数this设计的主要目的,以特定的方式改变this的行为特性,解决this相关编码的一个常见的痛点。

  => 箭头函数this设计的主要目的,以特定的方式改变this的行为特性,解决this相关编码的一个常见的痛点。

 

  => 箭头函数this设计的主要目的,以特定的方式改变this的行为特性,解决this相关编码的一个常见的痛点。

 

  来看一个例子来看看这个痛点:

var utils = {
  getData:function(a,b){
    var self = this;
    builtinModules.addEventListener(\'click\',function(){
      self.getData(12,34);
    },false)
  }
}

在这个例子里面,为了确保this的指向正确,所以我们用了一个变量缓存this:

 var self = this;

然后再通过self去调用 this。。

self.getData(12,34);

this是动态绑定的,在本例子中,getData() 的this 和 btn.click回调函数的this是不同。这种方式在ES5中太常见来

那么ES6推出的箭头函数,应该如何写?是怎么解决这个痛点呢?

  getData:function(a,b){
    // var self = this;
    builtinModules.addEventListener(\'click\',() => {
      this.getData(12,34); // 这里的this 跟 getData{}函数体里面的this 保持一致
},
false); }

看到没有,也就是说,箭头函数,帮我们解决了 var self = this;self.xxxx()的痛点。甚至你可以理解为 箭头函数就是替代了 var self = this这种词法形式;

 

那么问题来了。。。这种情况该如何解决呢???

var utils = {
  getData:(a,b) => {
    // var self = this;
    builtinModules.addEventListener(\'click\',() => {
      this.getUser();// error !!! 这里的this并不是指向的utils,所以访问不到getUser
    },false);
  },
  getUser:(a,b) => {
    // ...xxxx
  }
}

 

切记,箭头函数中的this,指向包围它的作用域,比如,此例中,this.getUser()这个this,在getData中调用,那么这个this就是指向了getData。

此utils里面,不适用箭头函数来相互调用。

 

那么何时应该使用this函数呢?从一张图可以看出来:

ES6-你不知道的箭头函数

 

 

 

 

 

 

最后,切记,千万别认为箭头函数就是为了少打字。不管多打字少打字,你得明白你输入的每个字的意义目的所在。

 

给TA打赏
共{{data.count}}人
人已打赏
随笔日记

聚焦“云开发圆桌论坛”,大前端Serverless大佬们释放了这些讯号!

2020-11-9 4:37:00

随笔日记

DDD「领域驱动设计」分层架构初探

2020-11-9 4:37:02

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索