2010-08-23 4 views
0
window.global_array = new Array(); 
window.example = function() 
{ 
    var x = new Object(); 
    x['test_property'] = 3; 
    global_array.push(x); 
} 

자바 스크립트 전문가가, 세 가지 질문에 답하시기 바랍니다 글로벌 기준에도 불구하고 내 VAR을 삭제합니다 :는 자바 스크립트

  1. 는 자바 스크립트 예() 반환 범위의 끝에서 X를 삭제하거나 global_array 내부를 유지합니다.
  2. 저는 안전하게 파이썬에서 '모든 것이 참조입니다'와 같은 javascript를 사용할 수 있습니까?
  3. 은 모두 동일한 VM을 만들었거나 GC 규칙이 구현에 따라 다릅니다.
+0

이 질문은 실제로 명확하지 않습니다. "삭제"는 무엇입니까? GC'd? – noah

+0

x에서 참조하는 Object를 메모리에서 제거합니다. – amwinter

답변

4
  1. 예. 예. x의 범위가 함수 본문으로 제한되어 있기 때문에 삭제됩니다 (var 키워드 사용). var없이 선언 된 변수는 함수 본문 내 에서조차 전역 변수가됩니다. 그러나 x은 계속해서 global_array에 있습니다.
  2. 아니요. 객체 (배열)도 참조로 전달되고 원시 값 (예 : 숫자)이 복사됩니다.
  3. GC는 구현에 따라 다를 수 있지만 이는 사용자의 관심 사항이 아니어야합니다. 자바 스크립트 구현은 버그가없는 한 동일하게 동작합니다.

x은 개체를 참조하기 때문에 할당 (push() 통해)이 참조 횟수를 증가시키고 있습니다. x이 함수의 끝에서 범위를 벗어나면 참조 횟수가 0으로 줄어들지 않으므로 객체는 여전히 존재합니다. 즉 global_array에서 유일한 참조입니다.