javascript-传输ES6箭头函数或命名函数-什么更好?
ECMAScript 6标准为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(
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(例如nativeaddEventListener
和jQuery)也将其上下文作为回调参数提供,因此不需要动态this
,它们可以与箭头一起使用
一些API(例如D3)没有考虑到这一问题,需要访问动态
this
;它们应该只与常规函数一起使用,并且需要self=this
技巧来访问词法this
。像这样的解决方案可以用来提供一个箭头,其中预期的动态this
作为参数。“现在我将代码传输到es6。”ES5你的意思是?箭头函数不维护自己的this
(它们从外部词汇环境获取this
),这使得它们在很多情况下都很有用(参见绑定)。他们也没有自己的参数,但我还没有找到一个在我自己的工作中有用的例子。我想这是由(他的答案包括箭头函数与函数
函数的详细描述)。您可以在此处查看答案:谢谢您的回答。我的问题是,如果我能同时使用这两种类型,我会使用哪种类型最好。如果我理解正确,那么更简单的语法是arrow函数的唯一优势。如果我更喜欢命名函数,那么我也可以使用它们。arrow函数无法访问词法this
。这只是为了帮助未来的搜索者。@NetOperatorWibby一个更正确的措辞是,词法这个
可以在arrow函数中访问。它真的可以。这是困扰你的措辞吗?我从来没有见过这个
在错误函数中返回任何东西,除了未定义的
。我不确定你的意思,还有re没有提到上面的错误函数。当在arrow函数中访问此
时,它是从封闭的词法上下文中检索的。这就是为什么它被称为“词法此
”。如果封闭上下文在严格模式下是全局范围,此
将是未定义的
。否则它可以是任何对象。我将最好检查一下这个主题的参考资料,