모든 식별자는 자신이 선언된 위치에 의해 다른 코드가 자신을 참조할 수 있는 유효범위가 정해진다.
중요한 것은 어디서 사용되는냐에 따라서 정해지는 것이 아닌 최초 선언된 위치에 의해서 스코프가 정해진다는 것
그리고 이것을 정적스코프 또는 렉시컬스코프를 따른다고 말한다. ( 어디서 사용 X, 어디서 정의 O )
let v = 10;
function foo(){
let v = 20;
bar();
}
function bar(){
console.log(v);
}
// 식별자의 선언위치에 따라서 스코프가 결정되므로 v값이 10이 되는 것
foo(); // 10
bar(); // 10
모든 식별자는 스코프체인에 의해서 검색해서 사용된다.
모든 스코프는 계층적으로 스코프체인에 의해서 연결된다. ( 실행컨텍스트의 렉시컬환경이 단방향으로 연결된 것 )
var
는 중복선언 허용조금더 자세한 내용은 23장 - 실행컨텍스트에서