[javascript] 클로저에 대한 정의
조회수 617회
안녕하세요. 자바스크립트로 클로저에 대해서 공부하고 있는데요.
- 자신이 정의된 환경 밖에서 실행되고
- 스코프 탐색이 현재 실행 스택이 아닌 외부를 참조할때 를 클로저라고 부른다고 이해하였습니다.
제가 참고하여 공부한 링크입니다 : 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()
도 실행되지 않나..?
라는 생각이 들어 외부에서 실행되었다는것이 정확히 무엇을 말하는것인지 잘 이해가 가지 않는것같습니다.
혹시 처음 함수가 실행되는 것이 외부에서 실행되어야하는것인가요?
질문 읽어주셔서 감사합니다!
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력