【问题标题】:Does it matter if a function returns a value which we don't need?如果一个函数返回一个我们不需要的值,这有关系吗?
【发布时间】:2020-08-31 20:37:11
【问题描述】:

例如,如果我们想要一个添加两个值的函数,我们可以使用 ES6 箭头语法以两种方式编写它:

const addShort = () => 1 + 1

const addLong = () => {
    1 + 1
}

在第一种情况下,我们得到的返回值为 2,而在第二种情况下,返回值是未定义的。

addShort 的返回值是否对性能、内存或类似因素有任何影响?我们应该避免返回我们不需要的值吗?

【问题讨论】:

  • 如果编译器不优化它,未使用的返回值可能会增加一些额外的处理。但这在 99.9% 的情况下绝对无关紧要——编写干净、可读的代码比担心性能要好,除非事情运行缓慢并且您需要确定瓶颈。 (但不会是这样)
  • 根据你将如何使用它来编写函数。
  • 如果你想知道......打开引擎的源代码并弄清楚。我非常怀疑它在正常情况下会产生任何明显的差异。使用该示例代码,引擎甚至可能不会运行您的一个功能,因为代码什么都不做。
  • 第二个版本仍然返回一些东西:它返回undefined

标签: javascript ecmascript-6 computer-science


【解决方案1】:

const addShort = () => 1 + 1 相当于 const addShort = function () { return 1 + 1; };

但是 const addLong = () => { 1 + 1 } 相当于 const addShort = function () { 1 + 1; };

当您在 1 + 1; 之类的语句中包含表达式(这里 1+1 是表达式)时,会计算(计算)表达式,但不会对结果进行任何处理。

就性能而言,退货与否几乎没有什么区别。如果在您的上下文中返回结果有意义,则无论函数如何使用,您都应该返回它。

【讨论】:

  • 实际上,我怀疑无法访问的返回值表达式是否被评估,也许函数本身甚至没有运行。
  • @dandavis 因为有可能产生副作用,所以会对其进行评估(除非有优化器检查副作用)。
  • 是的,我刚才在考虑这个问题,但我不认为 N​​umber 原语可以做到这一点,就像旧的 jsonp 数组构造函数劫持一样。这些天纯函数得到了超级优化。
猜你喜欢
  • 2020-03-04
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
相关资源
最近更新 更多