함수 안에 함수를 선언한 환경에서의 관계
클로저는 반환된 내부함수가 자신이 선언되었을때의 환경(렉시컬 환경)에서의 스코프를 기억하기 때문에 접근이 가능
function outerFunction() { var outerVariable = 'I am outer'; function innerFunction() { console.log(outerVariable); } return innerFunction; } var innerFunc = outerFunction(); innerFunc(); // 출력: I am outer
- innerFunction은 자신이 정의된 스코프 외부의 변수에 접근 가능(외부 변수인 outerVariable에 접근 가능)
- outerFunction은 innerFunction을 반환
- 클로저는 함수가 선언된 위치의 렉시컬 스코프(Lexical Scope)에 대한 참조를 유지(함수가 호출될 때가 아니라, 함수가 정의될 때의 스코프를 기준)
- 클로저는 외부 변수에 대한 참조를 유지하므로, 해당 변수의 값이 변경되면 클로저 내부에서도 해당 값이 변경됨