clouser(클로저)
1 | function outerFunc() { |
outerFunc 함수는 함수 내부에 name 지역 변수를 가지고 있고,
return 값으로 익명함수(inner함수라고 생각하자)를 가지고 있다.
아래에서 선언해준 myName 변수에 outerFunc()를 저장한다는 것은
myName은 outerFunc 함수의 return 값인 익명함수를 저장한다는 것이다.
1 | var myName = function(){ |
myName 에는 함수가 담겨있으므로 실행이 가능하고
myName()을 호출하면 ‘My name is SIM’ 라는 문자열이 console.log로 인해 출력된다.
여기서 이상한점은
1 | var myName = function(){ |
이부분에서 myName을 호출할때 익명함수 안의
console.log(‘My name is ‘+name) 의 name은 어디에도 존재하지 않는다.
그렇다면 당연히 not defined 에러가 나야하지만
실행해보면
‘My name is SIM’ 을 출력할 것이다.
이것이 Clouser(클로저)이다.
외부함수안의 내부함수를 호출할 때 이미 종료된 외부함수의 환경을 기억하여 사용한다.
즉, outerFunc 함수안의 내부함수(위의 예시의 익명함수)를 호출할 때
이미 호출되고 종료되어 접근 할 수 없는 outerFunc 함수의 환경을 기억해
name 값을 사용하는 것이다.