2015-10-26 69 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箭头函数都支持默认参数值。我知道这并没有什么不同,但值得一提的是国际海事组织。