클로저

박경찬·2022년 7월 14일
0

JavaScript

목록 보기
10/26

클로저는 자바스크립트 고유의 개념이 아니다. 함수를 일급 객체로 취급하는 함수형 프로그래밍 언어에서 사용되는 중요한 특성이다.

예제를 통해 알아보자!


outerFunc함수 내부에서 중첩 함수 innerFunc가 정의되고 호출되었다. 이때 중첩 함수 innerFunc의 상위 스코프는 외부 함수 outerFunc의 스코프이다. 따라서 중첩 함수 innerFunc 내부에서 자신을 포함하고 있는외부 함수 outerFunc의 x 변수에 접근할수 있다.

만약 innerFunc가 outerFunc 함수의 내부에 정의된 중첩함수가 아니라면 outerFunc 함수의 내부에서 호출한다 하더라도 outerFunc함수의 변수에 접근할수 없다.

자바스크립트 엔진은 함수를 어디서 호출했는지가 아니라 정의했는지에 따라 상위 스코프를 결정한다. 이를 렉시컬 스코프라한다

위함수는 foo함수와 bar 함수는 모두 전역에서 정의된 전역함수다.함수를 어디서 호출하는지는 함수의 상위 스코프 결정에 어떠한 영향도 주지 못한다. 즉, 함수의 상위 스코프는 함수를 정의한 위치에 의해 정적으로 결정되고 변하지 않는다.

따라서 함수의 상위 스코프를 결정한다 는 것은 렉시컬 환경의 외부 렉시컬 환경에 대한 참조에 저장할 참조값을 결정한다 는 것과 같다.

0개의 댓글