2013-02-28 2 views
0

파이어 폭스 확장 기능을 만드는 방법에 대한 튜토리얼에서 다음 코드를 얻었습니다.Javascript에서 참조 또는 값에 의해 반환 된 객체 속성이 반환 되었습니까?

오브젝트를 생성하고 이전에 보지 못했던 코드를 할당하는 방법을 사용합니다. 코드의 일부는 혼란 스럽습니다. JS가 어떻게 합리적으로 잘 작동 하는지를 이해할 수있었습니다.

var linkTargetFinder = function() { 

var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); 

return { 
    init : function() { 
     gBrowser.addEventListener("load", function() { 
      var autoRun = prefManager.getBoolPref("extensions.linktargetfinder.autorun"); 
      if (autoRun) { 
       linkTargetFinder.run(); 
      } 
     }, false); 
    }, 

    run : function() { 
     var head = content.document.getElementsByTagName("head")[0], 
      style = content.document.getElementById("link-target-finder-style"), 
      allLinks = content.document.getElementsByTagName("a"), 
      foundLinks = 0; 

     if (!style) { 
      style = content.document.createElement("link"); 
      style.id = "link-target-finder-style"; 
      style.type = "text/css"; 
      style.rel = "stylesheet"; 
      style.href = "chrome://linktargetfinder/skin/skin.css"; 
      head.appendChild(style); 
     } 

     for (var i=0, il=allLinks.length; i<il; i++) { 
      elm = allLinks[i]; 
      if (elm.getAttribute("target")) { 
       elm.className += ((elm.className.length > 0)? " " : "") + "link-target-finder-selected"; 
       foundLinks++; 
      } 
     } 
     if (foundLinks === 0) { 
      alert("No links found with a target attribute"); 
     } 
     else { 
      alert("Found " + foundLinks + " links with a target attribute"); 
     } 
    } 
}; 
}(); 

window.addEventListener("load", linkTargetFinder.init, false); 

내 질문은자가 실행 기능에서 변수 prefManager를 만들었습니다. 그런 다음 변수 linkTargetFinder에 할당 할 객체를 반환합니다. 개체가 반환되기 전에 메서드 정의에 배치 될 때 변수가 해당 값으로 변환됩니까? 또는 함수가 반환 된 후 파괴되거나 최소한 범위를 벗어난 것으로 생각되는 자체 실행 함수에서 생성 된 변수를 계속 참조합니까?

사전 도움을 주셔서 대단히 감사합니다. 검색 방법을 확실히 알 수는 없지만 여러 가지 실험을 통해 한 가지 방법으로 증명할 수 있는지 살펴보고 주변을 둘러 볼 수 있는지 알아 보았습니다.

답변

0

나는 이것에 대한 답이 closures이라는 것을 발견했다.

자체 실행 함수가 작성된 환경이 종료 될 때 변수가 닫히지 않을 것이므로 변수가 파괴되지 않습니다.

관련 문제