// 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箭頭函數內部的值始終從封閉範圍繼承。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