본문 바로가기

javascript

클로저의 힘을 느껴보자!!

var MyModules = (function Manager() {

var modules = {};

function define(name, deps, impl) {

for (var i=0; i<deps.length; i++) {

deps[i] = modules[deps[i]];

}

modules[name] = impl.apply( impl, deps );

}

function get(name) {

return modules[name];

}

return {

define: define,

get: get

};

})();

이 코드의 핵심부는 “modules[name] = impl.apply(impl, deps)”다. 이 부분은

(의존성을 인자로 넘겨) 모듈에 대한 정의 래퍼 함수를 호출하여 반환값인 모듈 API를

이름으로 정리된 내부 모듈 리스트에 저장한다.

해당 부분(modules[name] = impl.apply(impl, deps))을 이용해 모듈을 정의하는 다음

코드를 보자.

MyModules.define( "bar", [], function(){

function hello(who) {

return "Let me introduce: " + who;

}

return {

hello: hello

};

} );

MyModules.define( "foo", ["bar"], function(bar){

var hungry = "hippo";

function awesome() {

console.log( bar.hello( hungry ).toUpperCase() );

}

return {

awesome: awesome

};

} );


var bar = MyModules.get( "bar" );

var foo = MyModules.get( "foo" );

console.log(bar.hello( "hippo" )); // Let me introduce: hippo

foo.awesome(); // LET ME INTRODUCE: HIPPO

'javascript' 카테고리의 다른 글

apply call  (0) 2016.07.21
image onload  (0) 2016.07.21
apply, call 상속하기  (0) 2016.07.18
간단한 호이스팅 설명  (0) 2016.07.18
slice에 대한 고찰.  (0) 2016.06.10