2011-02-04 4 views
0

비슷한 질문을 여러 번 보았지만 아무도 내 문제에 대답하지 않는 것 같습니다. jQuery/JavaScript : 내 변수를 지우는 가비지 수집기입니까?

var mainDataObject = null; // Global 

// Called when DOM is ready with $(function() { ... }) 
$.ajax({ 
    type: "GET", 
    dataType: "json", 
    url: '...', 
    success: function(json) { 
     mainDataObject = json; 
    } 
}); 

mainDataObject, 또는 그 내용은, 잠시 후 삭제됩니까? 이것은 브라우저에 의존합니까? 페이지의 전체 수명 동안 변수가 필요합니다.

내가보고있는 문제는 무작위로 mainDataObject이 비어있는 것입니다. 나는 다양한 브라우저와 운영체제를 사용하는 무작위 사용자에게 문제를 재현 할 수 없다.

+0

ajax 호출의 범위는 무엇입니까? – Victor

답변

3

어떤 상황에서 mainDataObject이 생성되는지에 따라 다릅니다.

함수 (-context) 인 경우 함수가 끝나면 변수는 가비지 수집기에서 지워집니다.

글로벌 (-context) 내에있는 경우 명시 적으로 null으로 설정하거나 페이지가 언로드 될 때까지 남아 있습니다.

은 물론 경우에, 당신은, 어디, 어떻게 든로 Activation object[[Scope]]의 메모리가 지워지지 것 같지 것 mainDataObject 복사본을 생성 문맥을 통해 종료 기능을 클로저를 만들 수 있습니다.

+0

예, 죄송합니다. 추가 정보를 추가했습니다. - mainDataObject는 전역입니다. –

+0

mainDataObject는 true가 아닌이 예제에서는 – Distdev

+0

에서 global ($ .ajax 이상)로 선언됩니다. 함수 안에 클로저가있을 때 변수는 클로저 함수가 어딘가에서 참조되는만큼 오래 머무를 것입니다. – BiAiB

0

모든 자바 스크립트 변수는 계속해서 참조 할 수 있습니다.

변수가 가비지 수집되지 않을 때 걱정할 필요가있는 것은 반대가 아닙니다.

관련 문제