2012-04-12 57 views
3

我在某个地方读过一段时间(很遗憾不记得在哪里),因此总是在每个函数的末尾放一个return语句是明智的,因为它清除了在该函数中创建的对象和变量的内存。总是返回功能明智吗?

这有什么道理吗?

+13

函数总是返回,无论你是否使用'return'语句。添加'return'语句将不会清除内存或变量。 – 2012-04-12 21:13:39

回答

7

这是没有道理的。没有。

+0

感谢大家的回复。我不认为这个说法有任何真实性,但是我今天一直在想它,并且在网上找不到任何东西。再次感谢。 – user1265617 2012-04-12 21:45:29

3

Standard ECMA-262 ECMAScript Language Specification从(12.9):

语法

ReturnStatement
return ;
return [无LineTerminator这里] 表达;

[...]答return语句导致函数停止执行,并返回一个值给调用者 。如果Expression被省略,返回值是undefined。否则,返回值是表达式的值。

但事实恰恰相反:return语句可以防止内存被释放。

Functions and function scope - MDN # Preservation of variables

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 

通知时,返回insidex是如何保存下来。闭包必须保留它引用的所有作用域中的参数和变量。由于每个调用都提供了可能不同的参数,因此每次调用outside时都会创建一个新的闭包。只有当返回的inside不再可访问时,内存才能被释放。