javascript-传输ES6箭头函数或命名函数-什么更好?

javascript-传输ES6箭头函数或命名函数-什么更好?,javascript,ecmascript-6,transpiler,Javascript,Ecmascript 6,Transpiler,ECMAScript 6标准为JavaScript语言添加了许多新特性,包括新的符号 此时,我将代码传输到es6。现在有时有两种选择。我想知道哪一个更好 如果可能,请使用命名函数: document.getElementById('rotate').addEventListener('change', function rotate() { rotate(parseInt(this.value, 10)); }); 如有可能,使用箭头功能: document.getElementById(

ECMAScript 6标准为JavaScript语言添加了许多新特性,包括新的符号

此时,我将代码传输到es6。现在有时有两种选择。我想知道哪一个更好

如果可能,请使用命名函数:

document.getElementById('rotate').addEventListener('change', function rotate() {
  rotate(parseInt(this.value, 10));
});
如有可能,使用箭头功能:

document.getElementById('rotate').addEventListener('input', (event) => {
  rotate(parseInt(event.target.value, 10));
});
直到现在我才知道这一点

命名函数

  • 可以在错误堆栈中看到函数名
箭头函数

  • 简单的语法

是否还有其他优点或缺点

词法
可以在箭头函数中访问,它们无法访问
参数
,并且无法绑定

常规函数可以访问动态
参数
,并且可以绑定

必须使用哪一个作为回调的决定是基于此做出的。如果不涉及此,则可以使用箭头功能作为经验法则

大多数接受回调的API(例如native
addEventListener
和jQuery)也将其上下文作为回调参数提供,因此不需要动态
this
,它们可以与箭头一起使用


一些API(例如D3)没有考虑到这一问题,需要访问动态
this
;它们应该只与常规函数一起使用,并且需要
self=this
技巧来访问词法
this
。像这样的解决方案可以用来提供一个箭头,其中预期的动态
this
作为参数。

“现在我将代码传输到es6。”ES5你的意思是?箭头函数不维护自己的
this
(它们从外部词汇环境获取
this
),这使得它们在很多情况下都很有用(参见绑定)。他们也没有自己的
参数,但我还没有找到一个在我自己的工作中有用的例子。我想这是由(他的答案包括箭头函数与
函数
函数的详细描述)。您可以在此处查看答案:谢谢您的回答。我的问题是,如果我能同时使用这两种类型,我会使用哪种类型最好。如果我理解正确,那么更简单的语法是arrow函数的唯一优势。如果我更喜欢命名函数,那么我也可以使用它们。arrow函数无法访问词法
this
。这只是为了帮助未来的搜索者。@NetOperatorWibby一个更正确的措辞是,词法
这个
可以在arrow函数中访问。它真的可以。这是困扰你的措辞吗?我从来没有见过
这个
在错误函数中返回任何东西,除了
未定义的
。我不确定你的意思,还有re没有提到上面的错误函数。当在arrow函数中访问
时,它是从封闭的词法上下文中检索的。这就是为什么它被称为“词法
”。如果封闭上下文在严格模式下是全局范围,
将是
未定义的
。否则它可以是任何对象。我将最好检查一下这个主题的参考资料,