2009-10-22 3 views
4

Поддерживает ли JavaScript сборку мусора?Сбор мусора JavaScript, когда переменная выходит за рамки области

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

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

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

+0

, конечно, нет, технический директор: http://www.codingforums.com/archive/index.php/t-157637.html –

+0

Пожалуйста, переименуйте/обновлять теги: это не имеет никакого отношения к делать с оптимизацией. Я предлагаю «область переменной JavaScript» – kdgregory

+0

См. Также этот вопрос о JS GC - http://stackoverflow.com/questions/864516/what-is-javascript-garbage-collection – Kobi

ответ

3

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

5

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

1

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

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

Вы можете прочитать на обзорном в JavaScript: http://www.webdotdev.com/nvd/content/view/1340/

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

4

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