2009-10-22 4 views
4

JavaScript가 가비지 수집을 지원합니까? 예를 들어변수가 범위를 벗어날 때 JavaScript 가비지 수집

, 내가 사용하는 경우 :

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

내가 삭제 "삭제"를 사용할 필요가 수행 myName 변수 또는 그냥 무시?

+0

확실히 아니, CTO : 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

ignore - sayHello 함수가 완료된 후 myName이 범위를 벗어나 gc'ed가됩니다.

5

no.
delete은 메모리 관리가 아닌 개체에서 속성을 제거하는 데 사용됩니다.

1

다른 사람이 언급 한 바와 같이이, 함수가이 범위는 단지 함수 내에서이다, 그래서 GC가 다음을 정리할 수있는 당신의 변수가 범위를 벗어날 후 종료 할 때.

그러나 변수가 함수 외부의 어떤 것으로 참조 될 수 있습니다. 그런 다음 변수가 여전히 참조되어 있으므로 잠시 gc되지 않습니다.

당신은 자바 스크립트 범위 지정에 읽을 할 수 있습니다 : http://www.webdotdev.com/nvd/content/view/1340/

당신이 처리하려고하는 문제가있을 수 있습니다 당신은 메모리 누수를 만들 수 있습니다 폐쇄,와

, 내가 언급했던 관련된 문제입니다 : http://www.jibbering.com/faq/faq_notes/closures.html

4

자바 스크립트는 가비지 수집을 지원합니다. 이 경우 함수 내에서 변수를 명시 적으로 선언하기 때문에 함수가 종료되고 그 후 언젠가 수집 될 때 범위를 벗어나고 (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