어휘적 범위 지정(lexical scoping)에서 "lexical" 이란 변수가 어디에서 사용 가능한지 알기 위해 그 변수가 소스코드 내 어디에서 선언되었는지를 고려한다는 것을 의미한다.
코드 예시
function init() {
var name = "Mozilla" // name은 init에 의해 생성된 지역변수
function displayName() { // displayName() 은 내부 함수이며, 클로저다.
alert(name); // 부모 함수에서 선언된 변수를 사용
}
displayName();
}
init(); // "Mozilla"를 알림창으로 실행
displayName()
함수가 부모함수인 init()
함수의 지역변수 var name
을 가져다 씀.
따라서 함수가 중첩된 상황에서 파서가 어떻게 변수를 처리하는지 알 수 있다.
중첩된 함수는 외부 범위(scope)에서 선언한 변수에도 접근할 수 있다.