참조 대상 식별자(identifier, 변수, 함수의 이름과 같이 어떤 대상을 다른 대상과 구분하여 식별할 수 있는 유일한 이름)를 찾아내기 위한 규칙이다. 자바스크립트는 이 규칙대로 식별자를 찾는다.
블록 레벨 스코프(block-level scope): {} 코드블럭에서만 유효
함수 레벨 스코프(function-level scope) : 함수에서만 유효
ex)
var x = 0;
{
var x = 1;
console.log(x); // 1
}
console.log(x); // 1
// 위의 var 함수는 함수객체에서만 유효가 되는 기능이므로 코드블록에서 사용하면 전역에서 유효하다
let y = 0;
{
let y = 1;
console.log(y); // 1
}
console.log(y); // 0
전역에 변수를 선언하면 이 변수는 어디서든지 참조할 수 있는 전역 스코프를 갖는 전역 변수가 된다. var 키워드로 선언한 전역 변수는 전역 객체(Global Object) window의 프로퍼티이다.
(중첩 스코프는 가장 인접한 지역을 우선하여 참조한다.)
var x = 'global';
function foo() {
var x = 'local';
console.log(x);
function bar() { // 내부함수
console.log(x); // ?
}
bar();
}
foo();
console.log(x); // ?