【发布时间】:2017-05-17 16:47:25
【问题描述】:
我问这个问题是因为我和我的同事在编码风格上存在争议,因为他更喜欢箭头函数声明:
const sum = (a, b) => a + b;
而且我更喜欢老式的独立函数声明:
function sum(a, b) {
return a + b;
}
我的观点是旧式代码更具可读性,您可以更清楚地区分函数和变量声明。他的观点是带有箭头函数的代码运行得更快。
当您使用旧式独立函数声明而不是箭头函数时,您是否了解实际的性能损失(在 v8 中)?惩罚真的存在吗?
【问题讨论】:
-
我希望性能差异可以忽略不计,并且取决于供应商。函数体以同样的方式run。区别在于函数对象实例化(例如
prototype属性)和执行上下文实例化(例如接收器)。 -
@Jonasw 我的问题更具体。当其他问题未指定任何环境时,我只对 v8 细节感兴趣。我将编辑问题以使其更清楚。
-
ECMA6 提供的新方式只是旧方式的语法糖。主体以完全相同的方式执行,因此这些声明之间的性能没有变化。相反,正如@BenAston 所述,函数的实例化和上下文存在差异(例如,箭头函数
this不会改变上下文)。关于可读性,这也是一种习惯。箭头函数似乎更难以阅读,但也因为我们习惯于以旧方式阅读它们。可读性也是一种观点。 -
@Jonasw 我不太相信性能测试,因为 v8 优化器可以做一些棘手的事情。希望有v8背景的人能更深入的阐述一下这个问题。
标签: javascript node.js v8