편집 기록

편집 기록
  • 프로필 알 수 없는 사용자님의 편집
    날짜2019.02.20

    [javascript] 클로저에 대한 정의


    안녕하세요. 자바스크립트로 클로저에 대해서 공부하고 있는데요.

    1. 자신이 정의된 환경 밖에서 실행되고
    2. 스코프 탐색이 현재 실행 스택이 아닌 외부를 참조할때 를 클로저라고 부른다고 이해하였습니다.

    제가 참고하여 공부한 링크입니다 : https://meetup.toast.com/posts/86

    function foo() {
        var color = 'blue';
        function bar() {
            console.log(color);
        }
        bar();
    }
    foo();
    

    이 경우에 본문에서는 아래와 같이 말하고 있는데요.

    bar는 foo안에서 정의되고 실행되었을 뿐, foo밖으로 나오지 않았기 때문에 클로저라고 부르지 않는다.

    function count() {
        var i;
        for (i = 1; i < 10; i += 1) {
            setTimeout(function timer() {
                console.log(i);
            }, i*100);
        }
    }
    count();
    

    timer는 클로저로 언제 어디서 어떻게 호출되던지 항상 상위 스코프인 count에게 i를 알려달라고 요청할 것이다.

    본문에서는 위와 같이 timer 함수가 클로저라고 하였습니다. 이 코드의 경우 timer 함수가 내부함수이고 외부 스코프를 참조하는것은 알겠으나 , timer 역시 count함수 밖을 나오지 않았기에 클로저라고 부를 수 없는것 아닌가요?

    제가 생각하기에는 .. count();가 실행되면서 setTimeout함수가 실행되면서 내부의 timer함수또한 실행되어서 외부에서 사용되었다(?) 라고 말할 수 있을것같은데.. 이경우에 foo();가 실행되면서 내부에서 bar()도 실행되지 않나..? 라는 생각이 들어 외부에서 실행되었다는것이 정확히 무엇을 말하는것인지 잘 이해가 가지 않는것같습니다.

    혹시 처음 함수가 실행되는 것이 외부에서 실행되어야하는것인가요?

    질문 읽어주셔서 감사합니다!