【问题标题】:Is there a difference between returning inner variable from function versus returning directly value从函数返回内部变量与直接返回值之间有区别吗
【发布时间】:2016-01-03 00:51:32
【问题描述】:

假设我们有两个函数,它们返回一个大对象。一个直接返回数据,另一个将它分配给一个内部变量并返回这个变量。有没有人知道分配的堆内存和性能是否会有所不同,为什么?浏览器引擎是否会以某种方式优化代码,所以最终可能是一样的?

function foo() {
    return getSmth();
}

function foo() {
    var bar = getSmth();
    return bar;
}

【问题讨论】:

标签: javascript performance


【解决方案1】:

堆分配几乎是相同的。在第二个示例中并假设没有优化,如果内部函数的返回值是一个对象,那么您将复制一个对 bar 的额外引用。如果返回值是原始类型,那么您将复制用于保存该值的字节数。在任何一种情况下,额外的引用/值都会被丢弃,并且在不太可能的情况下,它曾经存储在堆上,可用于垃圾回收。

可能是 javascript 引擎在编译过程中将 bar 变量优化掉。

【讨论】:

  • 在非引用类型的情况下,例如原始字符串?但是,this answer suggests 那个bar 只会指向getSmth 的结果,不会被复制到内存中。
  • @zamnuts:绝对不是复制的(JavaScript 无优化是 100% 引用语义,优化不会为了好玩而复制)。唯一的问题是它是否(毫无意义地)存储对“堆栈”等效项的本地引用,然后加载它并返回它,或者它是否直接返回。我怀疑大多数优化的 JS 引擎会直接返回,但即使他们这样做,我个人也不希望毫无意义地创建命名变量;直接return,而不是在不利于可读性的东西上浪费代码行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 2012-12-22
相关资源
最近更新 更多