2013-11-01 5 views
1

JavaScript에서는 함수, 변수 및 클로저로 구성된 복잡한 객체가 있습니다.JavaScript에서 객체를 삭제하는 가장 좋은 방법은 무엇입니까?

이 개체는 매우 크고 복잡하며 반복적으로 만들어지고 파괴됩니다. 나는 매우 저전력, 매우 낮은 메모리 장치에서 작업 할 것이므로, 객체가 삭제되면 실제로 없어 졌음이 중요합니다.

fun2(); // 2 
// Interval: "f.o.u.r.", "f.o.u.r.", "f.o.u.r.", "f.o.u.r." ... 

그 대해 할 수 있나요 (:

window["obj"] = {}; 
obj.fun1 = function(){ 
    console.log(1); 
}; 

(function(){ 
    var n = 2; 
    function fun(){ 
     console.log(n); 
    } 
    obj.fun2 = fun; 
})(); 

(function(){ 
    var w = "Three"; 
    function fun(){ 
     console.log(w); 
    } 
    obj.fun3 = fun; 
})(); 

(function(){ 
    var w = "f.o.u.r."; 
    function fun(){ 
     setInterval(function(){ 
      console.log(w); 
     }, 1e3); // e.g. a timeout 
    } 
    obj.fun4 = fun; 
})(); 

obj.fun1(); 
obj.fun2(); 
obj.fun3(); 
obj.fun4(); 

var fun2 = obj.fun2; 

// window.obj = null; 
// window.obj = undefined; 
delete window.obj; 
console.log(typeof obj); // undefined 

보조 문제는 다음과 같은 "느린 참조"의 질문은 다음과 같습니다

는 코드 예제 개체를 삭제하기 전에 수동 정리 제외)? http://jsfiddle.net/8nE2f/

+0

참조 http://stackoverflow.com/questions/8467350/how-to-free-up-the-memory-in-javascript-to obj = null; – davidkonrad

+0

개체를 삭제하려는 경우 참고? –

+0

그리고 이것 : http://stackoverflow.com/questions/8310182/better-approach-nulling-variables-objects-in-javascript – Rudy

답변

3

당신은 널 (null)이

window.obj = null; 
delete window.obj; 

설정 객체를 수행하여 가장 좋은 영향을 미칠 것입니다 그것에 대한 참조를 제거 : 위의 코드의

JSFiddle는 여기에있다. 또한 delete 명령은 일반 변수에는 영향을주지 않으며 속성 만 영향을 미친다는 것을 기억하십시오.

개체 파괴를보다 확실하게 방지하려면 일반적으로 반 패턴 (antipattern)으로 간주되는 전역 컨텍스트를 전혀 사용하지 않는 것이 좋습니다.

+1

고마워요. 하나의 질문 :'window.obj'를 먼저'null'로 설정하면 어떤 이점이 있습니까? –

2

개체를 제거하는 유일한 방법은 JavaScript가이를 가비지 수집하는 것입니다. 따라서 실제로 개체를 참조하지 않고기도하는 것이 유일한 방법입니다.

동일한 개체를 반복적으로 만들고 파괴하는 경우 object pool을 사용해보십시오.

+0

매우 흥미로운 링크입니다. –

관련 문제