我说的是您不需要退货的情况。
例如:
let pos = {'x': 1, 'y': 1};
['x', 'y'].forEach((val) => pos[val] = 2);
我很好奇这个隐式收益是否影响forEach的表现?
如果我们添加花括号(因此该函数停止返回表达式的结果),是否会影响性能?
答案 0 :(得分:4)
即使在非常大的阵列上,您也无法检测到差异。但是,如果您感到好奇,则可以始终在您关心的JavaScript引擎上使用真实代码对其进行概要分析(因为合成代码会提供合成结果)。
用规范的术语来说,评估以+---------+------------+---------+
| user_id | user_badge | missing |
+---------+------------+---------+
| 1 | a,b | c,d,e |
| 2 | a,b,c,d | e |
| 3 | a | c,d,e,b |
+---------+------------+---------+
3 rows in set (0.00 sec)
(包括箭头的隐式返回)完成的功能代码与仅仅“掉下”代码末尾的结果会导致两种不同的完成方式,然后是过程调用该函数可以区分返回和不返回,并在不返回情况下提供return
。 undefined
的代码当然不会使用结果,但是从理论上讲,JavaScript引擎中可能有不同的代码路径到达那里,因此从理论上讲,它们的性能可能会略有不同。
不过,在实践中,我认为您可以放心地假设JavaScript引擎对此进行了很好的优化,并且区别并不明显。
通常,不要事先进行优化。当您在给定代码中遇到性能问题时,应对给定代码中的性能问题。 (也就是说,我完全完全理解对这种事情感兴趣……)
只是为了好玩我做了一个jsPerf,但在Chrome(V8)或Firefox(SpiderMonkey)上的综合测试中看不到任何明显的区别:
但是再次,综合测试得出综合结果。
答案 1 :(得分:2)
与大多数性能问题一样,正确的答案是对其进行度量。
在jsPerf上可以看到,差异微不足道,并且绝对会被the overhead from forEach等其他事物所抵消。
当然,实际上,这种规模的任何差异都不明显。