我希望将一些CoffeScript代码改写成ECMAScript 2015 (ES6)。
有些语法非常相似,例如箭头函数:
有些语法非常相似,例如箭头函数:
(param1, param2, paramN) => expression
ES6和CoffeeScript之间的主要区别是什么?
最好能从已经处于相同情况(来回转换箭头函数)的人那里得到预警,并指出需要避免的陷阱和错误。
(param1, param2, paramN) => expression
ES6和CoffeeScript之间的主要区别是什么?
最好能从已经处于相同情况(来回转换箭头函数)的人那里得到预警,并指出需要避免的陷阱和错误。
sum = (a, b) =>
return a + b
var sum;
sum = (function(_this) {
return function(a, b) {
return a + b;
};
})(this);
this
绑定。let arrowFunction = () => this.property
在 ES5 中,这个代码的翻译如下
let arrowFunction = (function () { return this.property }).bind(this)
由于箭头函数中的this
不能被绑定到其他任何东西,因此它们不能与new
关键字一起使用,因为后者需要将this
绑定到一个新对象。
在“普通”的JavaScript函数(非箭头函数)作用域中,有一个特殊的arguments
变量可供访问,它是“类似数组”的,并且有助于访问传递给函数的所有参数,而不管参数签名如何。当然,在CoffeeScript的fat-arrow函数中也是如此。在我的sum
示例中,如果有人调用它作为sum(1, 2, 3)
,则可以通过执行argument[2]
来访问第三个参数。箭头函数不提供arguments
,但具有“rest参数”。后者在CoffeeScript中也存在,他们称之为“splats”。
CS fat-arrow函数和JS箭头函数都支持默认参数值。我知道这不是一个区别,但我认为值得一提。
arguments
变量。 - user405398this
的引用并将其传递给闭包。ES6的实现确保函数*没有this
*,因此使用其父级词法绑定的this
。对于super
、arguments
和new.target
也是如此 - CoffeeScript的fat arrow不会"绑定"它们。 - CodingIntriguebind()
调用解糖成闭包),这似乎是ES6箭头函数和绑定函数之间的区别是什么?的重复。 - Bergi