흔히 하는 자바스크립트 클로저와 관련된 실수 :: 2008/12/12 18:01



간단한 자바 스크립트 코드입니다.
뭐가 출력될까요? 3이 출력됩니다.

고쳐봅시다.


의미가 좀 불명확하죠.
아래와 같이 고치면 확실히 무슨 일을 하는 코드인지 눈에 들어옵니다.


설명해 봅시다.
클로저에 관한 건데요. 첫 번째 샘플은 for문이 마치 클로저같은 역할을 하는 것처럼 보이지만 아닙니다. 자바스크립트 클로저는 항상 함수랑 관계가 있기 때문입니다. 즉, 저기는 클로저가 없습니다. 그러니 i가 저장된 런타임 정보는 글로벌 밖에 엄죠. 그러니 마지막 값인 3이 출력되는 겁니다.

마지막 예제를 살펴봅시다. GenerateFunction안에서 리턴되는 함수에서는 GenerateFunction 함수 안의 값인 i를 참조하고 있습니다. 즉, 클로저가 생긴거죠. 그래서 리턴된 함수가 계속 살아 있는 동안 해당 컨텍스트 정보도 파괴되지 않고 같이 살아 있습니다. 그래서 0이 출력되는 겁니다.

스폰서
글타래

  • 2주간 인기 글
  • 2주간 인기글이 없습니다.
Trackback Address :: http://jiniya.net/tt/trackback/748
  • Gravatar Image.
    minis24 | 2009/11/09 14:29 | PERMALINK | EDIT/DEL | REPLY

    안녕하세요..약간의 오류가 있어서 남깁니다.
    제일 처음의 소스에서는 2가 출력이 됩니다. 배열의 길이가 2죠~~~~
    i가 2가 되었을때 false 가 되어 루프를 벗어나게 됩니다.

    클로저는 가비지컬렉션(gc)의 작동방식을 이용한 방법인데요..자바스크립트 클래스에서 프라이빗 변수를 선언할때 유용합니다.

    자바스크립트에서 gc는 아무런 참조가 없는 객체를 메모리에서 삭제하지요...하지만 클로저를 사용하여
    참조를 리턴하게 되면 함수가 실행이 끝난뒤에도 참조가 살아 있기 때문에 객체가 메모리에서 삭제되지 않고 사용할 수 있게 되는것입니다..

Name
Password
Homepage
Secret
< PREV | 1| ... 32|33|34|35|36|37|38|39|40| ... 604| NEXT >