자바스크립트에서 스코프(scope)는 변수와 함수의 유효 범위를 결정한다.
즉, 변수나 함수가 어디에서부터 접근 가능한지를 결정하는 것이다.
자바스크립트에서는 다음과 같이 두 가지 유형의 스코프가 있다.
전역 스코프는 어떤 함수나 블록에도 속하지 않는 최상위 스코프다.
전역 스코프에서 선언된 변수와 함수는 어디서든 접근이 가능하다.
const globalVar = 'global variable'; // 전역 스코프에서 선언된 변수
function globalFunction() { // 전역 스코프에서 선언된 함수
console.log(globalVar); // 'global variable' 출력
}
globalFunction();
지역 스코프는 특정 함수나 블록 내부에서 선언된 변수와 함수가 유효한 범위다.
지역 스코프 내부에서 선언된 변수와 함수는 해당 지역 스코프 내부에서만 접근이 가능하다.
function localFunction() { // 지역 스코프에서 선언된 함수
const localVar = 'local variable'; // 지역 스코프에서 선언된 변수
console.log(localVar); // 'local variable' 출력
}
localFunction();
console.log(localVar); // ReferenceError: localVar is not defined
let과 const를 사용하여 블록 스코프(block scope)를 생성할 수 있다.
블록 스코프는 중괄호({})로 묶인 코드 블록 내부에서만 유효한 범위를 가진다.
{
let blockVar = 'block variable'; // 블록 스코프에서 선언된 변수
console.log(blockVar); // 'block variable' 출력
}
console.log(blockVar); // ReferenceError: blockVar is not defined
기술면접 때 중괄호로만 묶어도 블록스코프가 되냐는 질문이 있었다.
if문, for문 등 문(statement)로 감싸진 것들이 블록 스코프를 가지기 때문에 중괄호({})만 있어도 가능 할 것 같다고 판단해서 가능하다고 대답했다.