Javascript 向箭头函数添加大括号是否可以提高性能?

Javascript 向箭头函数添加大括号是否可以提高性能?,javascript,performance,arrow-functions,Javascript,Performance,Arrow Functions,我说的是你不需要归还任何东西的情况 例如: let pos = {'x': 1, 'y': 1}; ['x', 'y'].forEach((val) => pos[val] = 2); 我很好奇这种隐式返回是否会影响forEach的性能 如果我们添加大括号,使函数停止返回表达式的结果,这会影响性能吗?这不会对您检测到的结果产生影响,即使是在非常非常大的数组上也不会。但是如果你好奇的话,你可以在你关心的JavaScript引擎上分析它,并使用真实的代码,因为合成代码会给出合成结果 在规范术

我说的是你不需要归还任何东西的情况

例如:

let pos = {'x': 1, 'y': 1};
['x', 'y'].forEach((val) => pos[val] = 2);
我很好奇这种隐式返回是否会影响forEach的性能


如果我们添加大括号,使函数停止返回表达式的结果,这会影响性能吗?

这不会对您检测到的结果产生影响,即使是在非常非常大的数组上也不会。但是如果你好奇的话,你可以在你关心的JavaScript引擎上分析它,并使用真实的代码,因为合成代码会给出合成结果

在规范术语中,计算以返回(包括箭头的隐式返回)完成的函数代码与仅从代码末尾落下的函数代码会导致两种不同类型的完成,然后调用该函数的过程区分返回和非返回,并在非返回情况下提供未定义的。当然,forEach的代码不使用结果,但理论上JavaScript引擎中可能有不同的代码路径,因此理论上它们的性能可能略有不同

不过,在实践中,我认为您可以放心地假设JavaScript引擎对此进行了很好的优化,但差异并不明显

一般来说,不要提前优化。当给定代码位中存在性能问题时,对给定代码位中的性能问题作出响应。也就是说,我完全理解抽象地对这类事情感兴趣

只是为了好玩,我在Chrome V8或Firefox SpiderMonkey上做了一个综合测试,没有发现任何明显的区别:


但同样,合成测试会给出合成结果。

这不会对你检测到的结果产生任何影响,即使是在非常非常大的阵列上。但是如果你好奇的话,你可以在你关心的JavaScript引擎上分析它,并使用真实的代码,因为合成代码会给出合成结果

在规范术语中,计算以返回(包括箭头的隐式返回)完成的函数代码与仅从代码末尾落下的函数代码会导致两种不同类型的完成,然后调用该函数的过程区分返回和非返回,并在非返回情况下提供未定义的。当然,forEach的代码不使用结果,但理论上JavaScript引擎中可能有不同的代码路径,因此理论上它们的性能可能略有不同

不过,在实践中,我认为您可以放心地假设JavaScript引擎对此进行了很好的优化,但差异并不明显

一般来说,不要提前优化。当给定代码位中存在性能问题时,对给定代码位中的性能问题作出响应。也就是说,我完全理解抽象地对这类事情感兴趣

只是为了好玩,我在Chrome V8或Firefox SpiderMonkey上做了一个综合测试,没有发现任何明显的区别:


但同样,综合测试会给出综合结果。

与大多数性能问题一样,正确的答案是测量它

正如我们可以看到的那样,这些差异是无法估量的,而且肯定会被其他因素所抵消,比如等等

当然,在现实中,这种规模的任何差异都是不明显的


与大多数性能问题一样,正确的答案是测量它

正如我们可以看到的那样,这些差异是无法估量的,而且肯定会被其他因素所抵消,比如等等

当然,在现实中,这种规模的任何差异都是不明显的


基准测试…!?每个JavaScript函数都有一个隐式的未定义返回。所以,即使你不返回任何东西,你实际上是在返回一些被忽略的值。简而言之:没有,没有任何性能改进。现代javascript引擎足够智能,可以单独执行优化例程,而forEach是非常优化的,因为它是本机的code@CristianTraìna-不完全是,在规范级别。但从外部看,这似乎是发生的事情。您也可以添加void关键字以获得相同的效果…我建议为常量val编写['x','y']pos[val]=2;不管怎样,基准测试…!?每个JavaScript函数都有一个隐式的未定义返回。所以,即使你不返回任何东西,你实际上是在返回一些被忽略的值。简而言之:没有,没有任何性能改进。现代javascript引擎足够智能,可以单独执行优化例程,而forEach是非常优化的,因为它是本机的code@CristianTraìna-不完全是,在规范级别。但从外部看,这似乎是发生的事情。您也可以添加void关键字以获得相同的效果…我建议为常量val编写['x','y']pos[val]=2;无论如何