자바 스크립트 및 모듈 패턴을 배우고 있지만 코드에서 실수를 범했지만이 패턴에 대한 개념이 잘못 되었음이 틀린 것으로 입증되었습니다. 내 기본 코드는 다음과 같다 : 자바 스크립트 모듈 패턴 변수 범위
(function(window,$){
//global menu object
var menu = (function(){
//menu tab component
var tab = (function(){
//public properties
var tab = {
init:doStuff
}
//private properties
function doStuff(){
alert("initialising Tab")
}
//return public properties
return tab;
})();
//menu curtain component
var curtain = (function(){
//public properties
var curtain = {
init:doStuff
}
//private properties
function doStuff(){
alert("initialising Curtain")
}
//return public properties
return curtain;
})();
//menu content component
var content = (function(){
//public properties
var content = {
init:doStuff
}
//private properties
function doStuff(){
alert("initialising Content")
}
//return public properties
return content;
})();
//public properties
var menu = {
init:initialiseMenu
}
//private properties
function initialiseMenu(){
//initialise each component of the menu system
tab.init();
curtain.init();
content.init();
}
//final menu object
return menu;
})();
window.menu = menu;
})(window,jQuery);
이 내 페이지가로드 코드라고 그런 경우 :
menu.init();
그것은 순서로 경고를 제공합니다
initialising tab
initialising curtain
initialising content
내가 예상대로. 나는 콘텐츠 구성 요소를 변경한다면 다음과 같이 할 수 있습니다 :
//menu content component
var content = (function(){
//public properties
var content = {
init:doStuff
}
//private properties
function doStuff(){
alert("initialising Content")
}
//CHECK ACCESS TO PREVIOUS VARIABLES
curtain.init();
//return public properties
return content;
})();
은 순서대로 알림을 제공합니다
initialising curtain
initialising tab
initialising curtain
initialising content
그래서 나는 년후에도 커튼 변수에 액세스 할 수 있는지 참조 인수로 모듈에 전달되지 않았습니다. 각 모듈에는 자체 포함되어 있다고 생각했지만, 사실이 아니라는 것을 발견했습니다. 모듈을 만들 변수가 필요한 변수에만 액세스 할 수 있습니까? 특히 내 예를 들어 도움이 될 것입니다, Dan 감사합니다.
이 여전히 ES6이 출시 된 현재입니까? –
예, ES6은 ES5의 상위 집합입니다. 'let'과 같은 새로운 범위 구조가 있지만이 코드는 여전히 유효합니다. –