- 참조 대상 식별자를 찾아내기 위한 규칙
*참조 대상 식별자 : 변수, 함수의 이름과 같이 어떤 대상을 다른
대상과 구분하여 식별할 수 있는 유일한 이름
var x = 'global';
function foo () {
var x = 'function scope';
console.log(x);
}
foo(); // function scope
console.log(x); // global
- 전역 스코프(Global scope)
: 코드 어디에서든지 참조 가능
- 지역 스코프(Local scope or Function-level scope)
: 함수 코드 블록이 만든 스코프로 함수 자신과 하위 함수에서만 참조 가능
- 전역 변수(Global variable)
: 전역에서 선언된 변수이며 어디에든 참조 가능
- 지역 변수(Local variable)
: 지역(함수) 내에서 선언된 변수이며 그 지역과
그 지역의 하부 지역에서만 참조 가능
변수는 선언 위치에 의해 스코프를 가짐
전역에서 선언된 변수는 전역 스코프를 갖는 전역 변수이고,
지역에서 선언된 변수는 지역 스코프를 갖는 지역 변수가 됨
전역 스코프를 갖는 전역 변수는 전역에서 참조 가능
지역에서 선언된 지역 변수는 그 지역과 그 지역의
하부 지역에서만 참조 가능
- 함수 레벨 스코프(function-level scrop)
: 함수 블록 내에서 선언된 변수는 함수 코드 블록 내에서만
유효하고 함수 외부에서는 유효하지 않다.
- ES6에서 도입된 let 키워드를 사용하면 블록 레벨 스코프 사용 가능
var x = 0;
{
var x = 1;
console.log(x); // 1
}
console.log(x); // 1
let y = 2;
{
let y = 3;
console.log(y); // 3
}
console.log(y); // 2
- 전역에 변수를 선언하면 어디서든지 참조할 수 있는 전역 스코프를 갖는
전역 변수가 됨- var 키워드로 선언한 전역 변수는 전역 객체(Global Object)
window의 프로퍼티이다.- 전역 변수의 사용은 변수 이름이 중복될 수 있고, 의도치 않은 재할당에
의한 상태 변화로 코드를 예측하기 어렵게 만드므로 사용을 억제해야 함
if (true) {
var x = 1;
}
console.log(x); // 1
- 함수 밖에서 선언된 변수는 코드 블록 내에서 선언되었다할지라도
모두 전역 스코프를 갖게됨