본 글은 ‘모던 자바스크립트 Deep Dive’ 13장, ‘스코프’를 참고하여 작성되었습니다.
var x = 1; // 1. 렉시컬 스코프에 등록
function foo(){ // 2. 렉시컬 스코프에 등록
var x = 10;
bar();
}
function bar(){ // 3. 렉시컬 스코프에 등록
console.log(x);
}
foo(); // 1
bar(); // 1
함수를 어디서 호출 했는지에 따라 상위 스코프를 결정한다.
함수를 어디서 정의했는지에 따라 상위 스코프를 결정한다
자바스크립트의 스코프 결정 방식!
→ 선언한 함수, 변수들의 렉시컬 스코프가 결정되는 것은 런타임 이전이다.
상위 스코프에서 유효한 변수는 하위 스코프에서 자유롭게 참조할 수 있지만
하위스코프에서 유효한 변수를 상위스코프에서는 참조할 수 없기 때문이다.
따라서 function bar는 항상 var x = 1만 참조한다.