[자바스크립트] 클로저(closure)

발췌 : 자바스크립트 핵심 가이드 (Douglas Crockford 저)
var add = function (a, b) {
return a + b;
}

var myObject = function ( ) {
var value = 0;

return {
increment: function (inc) {
value += typeof inc === 'number' ? inc : 1;
},
getValue: function ( ) {
return value;
}
}
}( );

myObject.double = function ( ) {
var that = this;

var helper = function ( ) {
that.value = add(that.value, that.value)
};

helper( );
};

myObject.increment( );
myObject.increment(2);
myObject.double( );
console.log(myObject.getValue( )); // why result is 3? I want to 6!
myObject를 객체 리터럴로 초기화하는 대신에 위 코드처럼 객체 리터럴을 반환하는 함수를 호출하여 초기화합니다. 이렇게 하면 increment와 getValue를 통해 value라는 변수에 접근할 수 있지만 함수 유효범위 때문에 프로그램의 나머지 부분에서는 접근할 수 없습니다.

코드를 보면 myObject에 함수를 할당한 것이 아니라 함수를 호출한 결과를 할당하고 있습니다. 범위 마지막의 ()를 주목할 필요가 있습니다. 함수는 메소드 두 개를 가진 객체를 반환하며 이 두 메소드는 계속해서 value라는 변수에 접근할 수 있습니다.

이렇게, 함수가 자신이 생성된 함수, 즉 자신을 내포하는 함수의 문맥(context)에 접근할 수 있도록 하는 것을 클로저라고 합니다.




[자바스크립트] 함수 호출 4가지 패턴

자바스크립트의 함수 호출 패턴을 정리합니다. (발췌 : 자바스크립트 핵심 가이드, Douglas Crockford 저)(http://www.palfrader.org/code/code2html/cgi/)책이 2008년에 인쇄되었는데 자바스크립트의 변경된 스펙까지는 반영하지 못하였습니다.단순히 책의 설명을 발췌하고 당시 자바스크립트의 설계를 이해하... » 내용보기

2013 마무리... 배당금?

작년 3분기부터 올해까지 쭈욱 물려만 있다.한종목 거래로 약간의 수익은 냈지만 그냥 저냥이다.누군가는 손실의 일부를 정리하고 다른 종목에 거래를 하라고 하지만..난 생각이 다르다...물려 있는 기간만큼 얻을 지식도 준비할 시간도 얻는 것이라 믿는다.주식을 시작하고 운좋게도 수익이 잘 났다.누구나 그렇듯 나에게도 그런것이었고,초심으로 조심스럽게 접근하던 ... » 내용보기

[일드] Summer Nude

1년만에 키보드에 손을 올린다.그동안 무언가를 적어야 겠다는 생각이 몇번 들긴 했지만 실행으로 옮겨지진 않았다.그러다 운명과 같이 2013년 3분기 일본 드라마 Summer Nude를 2화까지 보게 되었고...공감과 기대를 가지게 되어 이 기분만은 잊고 싶지 않아 끄적여본다.먼저 출연진이 화려하드라.야마시타 토모히사, 카리나, 토다 에리카, 나가사와 마... » 내용보기

블리자드 음?

정확히는 디아블로3 라고 해야할까?만렙까진 불같이 재밌었는데...영 할게 없다 -_-;와우 판다도 그렇게 크게 기대되진 않고...게다가 이번 디아3 서버 상태는...어떤 새로운걸 시도하는지 모르겠다만...영 씁쓸하다는...상상을 초월하는 동접수를 다루느라 그런가?그에 비해 블소의 서버 안정성은 참 좋더군... (아이온도 그랬었다지?)겜은 재미없지만...... » 내용보기