스코프 체인(Scope Chain)
- var의 scope, let/const의 scope가 다르다는 것은 이전에 이미 다루었다.
- 자바스크립트 엔진은 식별자를 찾을 때 일단 함수레벨이든 블록레벨이든 각 스코프에서 찾게 된다.
- 그런데 만일 그 스코프에 식별자가 없다면? 상위 스코프, 차상위 스코프에서 찾는다. 이를
스코프 체인
이라고 하며 이는 스코프가 중첩되어있는 모든 상황에서 발생한다.
렉시컬 스코프(Lexical Scope) 또는 정적 스코프(Static Scope)
- 함수가 어디서 선언되었는지에 따라 상위 스코프가 결정되는 것이다.
- 렉시컬 스코프와 정적 스코프는 동의어이다.
동적 스코프(Dynamic Scope)
- 함수를 어디서 호출했는지에 따라 상위 스코프가 결정되는 것이다.
[실험]
아래 실험에서 foo()
는 어떤 값을 반환하게 될까?
var x = 1;
function foo() {
var x = 10;
bar();
}
function bar() {
console.log(x);
}
foo(); // 10? 1?
bar(); // 1
1을 반환한다. 즉, 자바스크립트는 렉시컬 스코프를 따른다는 것이다!(단, this
만은 동적 스코프를 따른다.)
[참고자료]
https://leehwarang.github.io//docs/tech/2019-10-07-scope.html
https://poiemaweb.com/js-scope