2012-10-08 3 views
3

가능한 중복 :
how to empty an array in JavaScript
Best way to deallocate an array of array in javascript용지 객체

내가 객체의 배열을 가지고 :

var arr = [complexObj1, complexObj2]; 

내가 배열을 삭제하려면 메모리 누출이 없는지 확인하고, 날개 짓?

complexObj.release(); or 
arr[0] = null; or 
delete arr[0]; 

:

arr.length = 0; 

또는 내가 내 배열을 반복하고 같은 전화를해야합니까? 배열이 다른에 대한 참조없이 간단한 개체로 구성된 경우 당신은 단지

arr = null 
+0

예, 실제로 [자바 스크립트에서 배열을 비우는 방법] (http://stackoverflow.com/questions/1232040/how-to-empty-an-array-in-javascript) 질문을 이미 읽었습니다. 내가 arr.length = 0을 가능한 해결책으로 쓴 이유이다. 객체가 문자열 및 int 같은 단순한 객체가 아닌 경우 JS 가비지 수집을 실제로 트리거하는지 여부를 묻습니다. –

답변

1

을 할 필요가

arr = []; 
+0

굉장, 고마워! –

1

그냥 배열을 다시 초기화 메소드 또는 DOM 요소가 있으면 위의 모든 솔루션으로 충분합니다.

그러나 배열에 DOM 요소에 연결된 이벤트 처리기에 대한 참조를 보유하는 객체가 포함되어 있으면 배열을 지울 때 객체가 삭제되지 않습니다.

이제 myArray = []을 사용하여 배열을 '재설정'하면. 배열은 정리되지만 객체에는 여전히 노드와 버튼을 클릭 할 때 트리거되는 라이브 이벤트 핸들러가 있습니다. 즉 객체를 메모리에서 제거 할 수 없습니다. 배열에서 제거하여 방금 참조를 잃었습니다.

첫 번째 생각은 복잡한 개체를 '파괴'하고 유지하는 참조를 제거해야한다는 점에서 올바른 생각이었습니다.

Complex.prototype.release = function() { 
    this.node.removeEventListener('click',this.handler); 
    delete this.handler; 
    delete this.node 

} 

노드에서 이벤트 수신기를 제거하기 위해 개체의 배열과 호출 릴리스를 반복합니다.

이것은 사람들이 대개 그리워한다고 생각하는 간단한 예입니다. 이벤트 처리기 일 필요는 없지만 복잡한 객체 외부에서 참조되는 모든 것이 될 수 있습니다.

+0

http://stackoverflow.com/questions/1232040/how-to-empty-an-array-in- 자바 스크립트, 이건 좋지 않아 작동하지 않습니다 ... –

+0

이것은 배열을 초기화합니다 – Codesen

0

뭔가 같은

var t = myArray; 
delete myArray; 
//or 
myArray = null;