🐝 상위 스코프의 결정
프로그래밍 언어가 함수의 상위 스코프를 결정하는 방법에는
- 동적(Dynamic) 스코프: 함수를 호출한 위치에 따라 결정
- 정적(Static) 스코프 -> 렉시컬(Lexical) 스코프: 함수를 선언한 위치에 따라 결정
두 가지 방법이 있습니다.
예를 들어, 아래와 같은 코드가 있을 때
var x = 1;
function foo() {
var x = 10;
bar(); // 함수 bar()가 호출된 위치
}
function bar() { // 함수 bar()가 선언된 위치
console.log(x);
}
foo();
동적 스코프를 따른다면 함수를 호출한 위치에 따라 상위 스코프를 결정하여,
함수 bar()의 상위 스코프는 -> 함수 foo()와 전역 변수인 x입니다.
정적 스코프(렉시컬 스코프)를 따른다면 함수를 선언한 위치에 따라 상위 스코프를 결정하여,
함수 bar()의 상위 스코프는 -> 전역 변수 x입니다.(호출한 위치 상관 없음)
그리고 자바스크립트를 포함한 대부분의 프로그래밍 언어는 정적 스코프인 렉시컬 스코프를 따릅니다.
🐝 렉시컬 스코프
'어휘의'라는 의미를 가진 'lexical'의 기본형인 'lexicon'은
'특정 언어/분야/개인/집단에서 사용하는 모든 어휘'를 가리키는데, 의미에서도 알 수 있듯이 한정된 범위 내에서 사용한다는 뜻입니다.
즉, 렉시컬 스코프란
함수를 어디에 선언하였는지(not 어디서 호출하였는지)에 따라 해당 함수의 상위 스코프가 결정되는 것입니다.
따라서 자바스크립트는 함수를 선언할 때 해당 함수의 상위 스코프가 결정되며,
함수를 호출한 위치는 스코프 결정에 어떠한 영향도 주지 않습니다.
다른 스코프에 대한 내용은 블로그의 이전 게시글을 참고해주세요.
읽어주셔서 감사합니다:)