scope를 변역하면 '범위'를 뜻한다. 즉 스코프란 '변수에 접근할 수 있는 범위'이다.
스코프에는 2가지 타입이 있다. 바로 전역(global)과 지역(local)이다.
전역 스코프(Global Scope)는 말 그대로 전역에 선언되어 있어 어느 곳에서든지 해당 변수에 접근할 수 있다는 의미이다.
지역 스코프(Local Scope)는 해당 지역에서만 접근할 수 있어 지역을 벗어난 곳에선 접근할 수 없다.
자바스크립트에서 함수를 선언할 때마다 새로운 스코프를 생성하게 된다. 함수 몸체에 선언한 변수는 해당 함수 몸체 안에서만 접근가능한데 이것을 함수 스코프이고 이걸 지역 스코프라고 할 수 있다.
const a = 1; // 전역 스코프
function print(){ // 지역 스코프
const a = 2;
console.log(a);
}
print(); // 2
console.log(a) // 1
print 함수에서 console.log(a) 는 a를 출력하기 위해 자신의 함수 스코프 안에 변수 a 가 있는지 찾는다. 그럼 const a = 2를 찾으면 2를 console에 출력한다.
Q. 만약 print 함수 안의 변수 a의 선언을 지운다면 console 엔 어떤 값이 출력될까?
Q. 함수 스코프 안에 a가 존재하지 않으니까 a가 선언되어 있지 않다는 에러를 출력할까?
const a = 1; //전역 스코프
function print(){ //함수 스코프
console.log(a)
}
print(); //1
결과는 전역 스코프에 선언되어 있는 a의 값인 1이 출력된다. 이는 scope chain에 의해 일어나는 현상이다. 현재 자신의 scope에 사용하고자 하는 변수가 없다면 scope chain을 통해 해당 변수를 찾게된다.