箭頭函數

箭頭函數的格式

// ES5
var selected = allJobs.filter(function (job) {
  return job.isSelected();
});

// ES6 箭頭函數
var selected = allJobs.filter(job => job.isSelected());

// ES6
$("#confetti-btn").click(event => {
  playTrumpet();
  fireConfettiCannon();
});
一、要編寫具備多個參數(或沒有參數或默認值或解構參數)的函數,在參數列表周圍添加括號。
二、帶有塊體的箭頭函數不會自動返回值。請使用return聲明。
三、使用箭頭函數建立普通對象時有一點須要注意。始終將對象括在括號中:

this指向

箭頭函數沒有本身的this值。this箭頭函數內部的值始終從封閉範圍繼承。app

對於將使用object.method()語法調用的方法,請使用非箭頭函數。這些函數將從調用者那裏得到有意義的 this值。其餘全部內容都使用箭頭功能。
{
  ...
  addAll: function addAll(pieces) {
    var self = this;
    _.each(pieces, function (piece) {
      self.add(piece);
    });
  },
  ...
}

// ES6
{
  ...
  addAll: function addAll(pieces) {
    _.each(pieces, piece => this.add(piece));
  },
  ...
}

箭頭函數與普通函數得區別

箭頭和非箭頭函數之間還有一個小的區別:箭頭函數也沒有本身的arguments對象。

普通函數:
一、函數做爲全局函數被調用時,this指向全局對象
二、函數做爲對象中的方法被調用時,this指向該對象
三、函數做爲構造函數的時候,this指向構造函數new出來的新對象
四、還能夠經過call,apply,bind改變this的指向函數

一、箭頭函數沒有this,函數內部的this來自於父級最近的非箭頭函數,而且不能改變this的指向。
二、箭頭函數沒有super
三、箭頭函數沒有arguments
四、箭頭函數沒有new.target綁定。
五、不能使用new
六、沒有原型
七、不支持重複的命名參數。this

相關文章
相關標籤/搜索