3

不久前我在某处读到(不幸的是不记得在哪里),总是return在 JavaScript 中的每个函数的末尾放置一个语句是明智的,因为它清除了在该函数中创建的对象和变量的内存。

这有什么道理吗?

4

2 回答 2

7

这没有道理。没有任何。

于 2012-04-12T21:18:08.647 回答
3

不。

来自标准 ECMA-262 ECMAScript 语言规范(12.9):

句法

ReturnStatement :
return ;
return[此处没有LineTerminator ]表达式 ;

[...]return语句会导致函数停止执行并向调用者返回一个值。如果Expression省略,则返回值为undefined。否则,返回值为Expression的值。

然而,情况恰恰相反:return语句可以防止内存被释放。

来自函数和函数范围 - MDN # 变量的保留

function outside(x) {
   function inside(y) {
      return x + y;
   }
   return inside;
}
fn_inside = outside(3); 
result = fn_inside(5); // returns 8

result1 = outside(3)(5); // returns 8

注意返回x时如何保存inside。闭包必须在它引用的所有范围内保留参数和变量。由于每次调用都可能提供不同的参数,因此每次调用都会创建一个新的闭包outside。只有当返回的内存inside不再可访问时,才能释放内存。

于 2012-04-12T21:28:44.110 回答