2012-04-12 82 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不再可訪問時,內存才能被釋放。