파이어 폭스 확장 기능을 만드는 방법에 대한 튜토리얼에서 다음 코드를 얻었습니다.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에 할당 할 객체를 반환합니다. 개체가 반환되기 전에 메서드 정의에 배치 될 때 변수가 해당 값으로 변환됩니까? 또는 함수가 반환 된 후 파괴되거나 최소한 범위를 벗어난 것으로 생각되는 자체 실행 함수에서 생성 된 변수를 계속 참조합니까?
사전 도움을 주셔서 대단히 감사합니다. 검색 방법을 확실히 알 수는 없지만 여러 가지 실험을 통해 한 가지 방법으로 증명할 수 있는지 살펴보고 주변을 둘러 볼 수 있는지 알아 보았습니다.