Сборка мусора JavaScript, когда переменная выходит из области видимости - PullRequest
4 голосов
/ 22 октября 2009

Поддерживает ли JavaScript сборку мусора?

Например, если я использую:

function sayHello (name){
    var myName = name;
    alert(myName);
}

мне нужно использовать "delete", чтобы удалить переменную myName, или я просто игнорирую ее?

Ответы [ 5 ]

5 голосов
/ 22 октября 2009

нет.
delete используется для удаления свойств из объектов, а не для управления памятью.

4 голосов
/ 22 октября 2009

JavaScript поддерживает сборку мусора. В этом случае, поскольку вы явно объявляете переменную внутри функции, она (1) выйдет из области видимости при выходе из функции и будет собрана через некоторое время после этого, и (2) не может быть целью delete (для каждой ссылки, связанной ниже).

Где delete может быть полезно, если вы объявляете переменные неявно, что помещает их в глобальную область видимости:

function foo()
{
    x = "foo";   /* x is in global scope */
    delete x;
}

Однако неявно определять переменные не рекомендуется, поэтому всегда используйте var, и вам не придется беспокоиться о delete.

Для получения дополнительной информации см .: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/delete_Operator

3 голосов
/ 22 октября 2009

Игнорировать это - после завершения функции sayHello myName выходит из области видимости и получает gc'ed.

1 голос
/ 22 октября 2009

Как уже упоминалось, при выходе из функции ваша переменная выходит из области видимости, поскольку ее область находится только внутри функции, поэтому gc может затем очистить ее.

Но, возможно, что на эту переменную ссылается что-то вне функции, тогда она не будет некоторое время сохраняться, если вообще когда-либо, так как на нее все еще есть ссылка.

Возможно, вы захотите ознакомиться с областью видимости в javascript: http://www.webdotdev.com/nvd/content/view/1340/

С помощью замыканий вы можете создавать утечки памяти, которые могут быть проблемой, с которой вы пытаетесь бороться, и связаны с проблемой, о которой я упоминал: http://www.jibbering.com/faq/faq_notes/closures.html

1 голос
/ 22 октября 2009

Тэду ничего не нужно делать, нет необходимости удалять эту переменную.

См .: http://www.codingforums.com/archive/index.php/t-157637.html

...