ES6箭头功能和CoffeeScript胖箭头功能之间的主要区别是什么?

时间:2015-10-26 13:38:11

标签: javascript coffeescript ecmascript-6 arrow-functions

我希望将一些CoffeScript代码重写为ECMAScript 2015(ES6)。

某些语法非常相似,例如胖箭头函数:

(param1, param2, paramN) => expression

ES6 =>CoffeeScript =>之间的主要区别是什么?

从那些已经处于相同情况(转换箭头函数来回)的人那里得到一个很好的帮助并且可以指出要避免的陷阱和错误。

1 个答案:

答案 0 :(得分:1)

CoffeeScript中的Fat-arrow函数转换为您常用的JavaScript函数,并将this绑定到词法范围(定义范围)中的值。像这样:

<强>的CoffeeScript

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

JavaScript转换

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到一个新的对象。

在&#34;正常&#34; JavaScript函数(非箭头)范围,可以访问特殊的arguments变量,该变量是&#34;数组,如&#34;并且无论参数签名如何,都可以访问传递给函数的所有参数。当然,在CoffeeScript fat-arrow函数中也是如此。在我的sum示例中,如果有人将其称为sum(1, 2, 3),则可以通过argument[2]访问第三个参数。箭头功能不提供arguments,但有&#34;休息参数&#34;。后者也存在于CoffeeScript中,他们称之为&#34; splats&#34;。

CS胖箭头函数和JS箭头函数都支持默认参数值。我知道,这并不是一个区别,但值得一提的是IMO。