1

나는 모바일을위한 무언가를 구축하고 어떻게 든, null 개체, null 비트 메모리를 해제하는 명확하게하고 싶습니다. 여기에 두 가지 빠른 예제가 있습니다. 두 가지 모두 익명 함수이지만 믿을 때 어떤 방식으로 더 낫거나 더 유효한 접근 방법입니까? 미안해. 내가 잘못하면. 나에게도 내가 필요로 할 때까지 객체가 만들어지지 않을 때 첫 번째 객체가 더 많이 마음에 들지만 모두 똑같은 것을하는 것처럼 보입니다. 두 번째 버전은 즉시 변수, 객체 등을 생성하기위한 코드를 실행하지만 필요할 때까지 기본 빌드 기능을 수행하지 않습니다.더 나은 접근 변수, 자바 스크립트의 개체를 null

저는 어떤 방식이 더 일반적인 것인지 파악하려고합니다. 나는 나 같은 초보자가 익명의 기능을 오해한다는 것을 알고있다. 당신의 기여에 감사드립니다.

V1

var app = function() { 

     //create variables, objects 
     var a = 'Data 1'; 
     var b = 'Data 2'; 

     //do some things  
     console.log(a + ', ' + b); 

     //do a cleanup 
     app.cleanup = function() { 

      a = null; 
      b = null; 
      console.log(a, b); 

     } 
    } 
    setTimeout(app, 200); 

V2

var app = {}; 

    (function(){ 

     //create variables, objects 
     var a = 'Data 1'; 
     var b = 'Data 2'; 

     app.build = function(){     

      //do some things 
      console.log(a + ', ' + b);   

     } 

     //do a cleanup 
     app.cleanup = function(){ 

      a = null; 
      b = null; 
      console.log(a, b); 

     } 

     setTimeout(app.build,200); 

    })(); 

나중에 HTML 또는 경우에 당신은 걱정하지 말아야

<input type="button" onclick="app.cleanup()" value="clean" /> 
+1

리소스를 확보하는 것에 대해 걱정할 필요가 없습니다. JavaScript에는 가비지 컬렉터가있어 범위를 벗어난 변수를 선택하여 파괴합니다. 객체를 필요로하지 않을 때 객체에 대한 참조를 삭제하고 ('delete obj.yourReference', /'reference = null' /'reference = undefined') 가비지 컬렉터가 나머지 작업을하도록하십시오. – Matt

+0

하지만 참조 또는 null을 삭제하려면 내 V1 또는 V2를 사용 하시겠습니까? 나는 여전히 어딘가에 그것을 할 필요가 있음을 의미한다. – devjs11

+0

@Matt가 말한 것을 단순화합니다. 변수를 사용할 수 없게되면 (어떤 방법으로도 변수에 액세스 할 수없는) 가비지 수집으로 표시됩니다. 기본적으로 변수가 함수 (로컬 변수, 경우에 따라)에서 만들어진 경우 함수가 끝난 후에는 아무도 해당 변수에 액세스 할 수 없으므로 자동으로 정리됩니다. – bezmax

답변

2

리소스를 확보하는 것에 대해 JavaScript에는 가비지 컬렉터가있어 범위를 벗어난 변수를 선택하여 파괴합니다. delete obj.yourReference, reference = null 또는 비슷한 것을 사용하지 않아도 객체에 대한 참조를 삭제하고 가비지 수집기가 나머지 작업을 수행하도록하십시오.

app.cleanup() 정의를 삭제하면 1이 자동으로 ab 변수를 자동으로 회수합니다. 그렇게하지 않는 한, ab은 뒤에 남기고있는 cleanup 함수에 의해 생성 된 클로저에 넣어 져서 가비지 컬렉터가 그 일을하지 않게됩니다.

# 1에서 전체 app을 제거하려면 창에 참조가있는대로 delete window.app 또는 app = null을 수행해야합니다.