잠시 동안 폐쇄를 둘러싼 JS 쓰레기 수거의 규칙에 대해 확신이 서지 않았기 때문에 물어볼 수도 있습니다. 여기에 참여하는 것이 궁금합니다. jQuery의 $.each
있어서폐쇄 간 쓰레기 수거에 대한 혼란
storeSelection: function() {
var enabledIds = {};
$.each(this.nodes, function(index, node) {
if (node.enabled) {
enabledIds[ node.id ] = true;
}
});
this.selection = enabledIds;
}
상기 SNIPPIT는 물론 객체 리터럴 부분. 그래서 배열 안에 활성화 된 항목의 ID를 저장하는 외부 함수의 맨 위에 새 객체를 만들었습니다. jQuery의 .each()
메서드를 사용하여 항목 배열과 사용 가능한 ID 로깅을 반복합니다. 마지막으로 선택 항목을 부모 개체의 멤버로 저장합니다.
내 질문에는 외부 범위에서 enabledIds
개체를 참조하는 내부 함수가 관련되어 있습니다. enabledIds
이 붙어 있기 때문에 내부 기능이 수집되는 것을 방지합니까? 내 함수의 끝에서 지워지는 변수 일 뿐이니까요. 그렇죠? 누수가되기 위해, 나는 내부 기능과 같이 외부 개체에 대한 하드 참조 할 필요가 가정
$.each(this.nodes, function(index, node) {
this.badIdea = enabledIds;
if (node.enabled) {
enabledIds[ node.id ] = true;
}
});
그러나 ... 난 항상이 규칙에 안개입니다. 이 혼란을 해결하는 데 도움이 될 것입니다!