아래 코드의 시행결과를 예측해보자.
var x = 1;
function foo(){
var x = 10;
bar();
}
function bar(){
console.log(x);
}
foo(); //?
bar(); //?
자바스크립트를 비롯한 대부분의 프로그래밍 언어는 렉시컬 스코프를 따른다. 렉시컬 스코프는 함수를 어디에서 호출하였는지가 아니라, 어디에 선언하였는지에 따라 결정된다.
따라서 함수 bar를 선언한 시점에 해당 함수의 상위 스코프가 결정되고, 함수 foo 안에서 bar를 호출하였다 하더라도 bar는 해당 함수가 정의된 전역스코프를 참조하여 x 값을 찾게 되고, 따라서 두번의 함수 호출에서 bar는 모두 1을 출력하게 된다.