2015-10-26 70 views
3

我正在重寫一些CoffeScript代碼到ECMAScript 2015(ES6)。ES6箭頭功能和CoffeeScript胖箭頭功能之間的主要區別是什麼?

一些語法非常相似,如脂肪箭頭功能:

(param1, param2, paramN) => expression 

什麼是ES6 =>CoffeeScript =>之間的主要區別?

從已經處於相同情況的人(來回轉換箭頭函數)中找到人頭並且指出避免的陷阱和錯誤是很好的方法。

+1

我認爲咖啡腳本的箭頭功能是'胖',而不是es6箭頭功能:P –

+0

@xyz「箭頭函數表達式(也稱爲胖箭頭函數)」mdn.io – lazlojuly

+0

同意。我明白你的觀點。 –

回答

1

CoffeeScript中的胖箭頭函數轉換爲您的常用JavaScript函數,並將this綁定到詞法作用域(定義範圍)中的值。像這樣:

CoffeeScript的

sum = (a, b) => 
    return a + b 

的JavaScript transpilation

var sum; 
sum = (function(_this) { 
    return function(a, b) { 
    return a + b; 
    }; 
})(this); 

在ES2015箭頭功能總是這樣做this結合。

let arrowFunction =() => this.property 

轉化爲這ES5

let arrowFunction = (function() { return this.property }).bind(this) 

由於this不能綁定到任何東西在箭頭功能一樣,它們無法與new關鍵字一起使用,因爲這需要綁定this到一個新的對象。

在「正常」JavaScript函數(非箭頭)範圍內,可以訪問特殊的「數組」類似的變量,用於訪問傳遞給函數的所有參數,而不管參數如何簽名。當然,CoffeeScript胖箭頭功能也是如此。在我的sum示例中,如果有人將其稱爲sum(1, 2, 3),則可以通過執行argument[2]來訪問第三個參數。箭頭功能不提供arguments,但具有「休息參數」。後者也存在於CoffeeScript中,他們稱之爲「splats」。

CS胖箭頭函數和JS箭頭函數都支持默認參數值。我知道這並沒有什麼不同,但值得一提的是國際海事組織。