본문으로 건너뛰기

스코프(Scope)

스코프(Scope)

JavaScriptt에서 스코프(scope)는 변수, 함수, 객체가 접근할 수 있는 범위를 뜻합니다.

스코프는 코드의 어느 부분에서 변수에 접근할 수 있는지를 결정합니다. JavaScript는 아래와 같이 여러 가지 스코프 규칙이 있습니다.


전역 스코프 (Global Scope): 전역 스코프를 갖는 전역 변수는 코드의 어느 곳에서나 접근할 수 있는 변수입니다. 함수 내부나 중괄호로({}) 감싸진 블록 내부가 아닌, 코드 최상위 레벨에서 선언합니다.

전역 변수
// 전역 변수 선언
var message = 'Hello, World!';

// 전역 변수 출력
console.log(message); // 출력: Hello, World!

function showMessage() {
message = 'Hello, JavaScript!'; // 전역 변수 값 변경
console.log(message); // message 변수 값 출력
}

// showMessage 함수 호출
showMessage(); // 출력: Hello, JavaScript!

지역 스코프 (Local Scope): 지역 스코프는 프로그래밍에서 변수가 선언된 함수, 또는 코드 블록 내에서만 접근할 수 있는 범위를 말합니다.

지역 스코프를 갖는 지역 변수(Local Variable)는 프로그래밍에서 함수나 블록 내부에서 선언되어 그 범위 내에서만 접근하고 사용할 수 있는 변수를 뜻합니다. 이를 통해 프로그램의 다른 부분과의 충돌을 방지합니다.

지역 변수와 전역 변수
let globalVar = "I'm a global variable!"; // 전역 변수

function myFunction() {
let localVar = "I'm a local variable!"; // 지역 변수
console.log(globalVar); // 전역 변수는 함수 안에서 접근 가능
}

console.log(localVar); // 오류: localVar는 myFunction 내부에서만 접근 가능

블록 스코프: letconst 키워드로 선언된 변수는 중괄호로 선언한 블록({}) 내에서만 접근 가능한 블록 스코프를 갖습니다. let으로 선언된 변수는 재할당이 가능하지만, const로 선언된 변수는 재할당이 불가능합니다.

블록 스코프
if (true) {
let blockVar = "I'm inside a block!"; // 블록 스코프
console.log(blockVar); // 블록 내에서 접근 가능
}
console.log(blockVar); // 오류: blockVar는 블록 내에서만 접근 가능

주의점

  • var로 선언된 변수는 블록 스코프를 가지지 않고, 함수 스코프를 갖습니다.

예시

스코프 예시
let outerVar = "I'm outside!";

function myFunction() {
let innerVar = "I'm inside!";
console.log(outerVar); // I'm outside!
console.log(innerVar); // I'm inside!
}

myFunction();
console.log(outerVar); // I'm outside!
console.log(innerVar); // 오류! innerVar는 myFunction 내에서만 접근 가능합니다.

스코프는 변수가 어디서 "보이는지"와 "사용할 수 있는지"를 결정합니다.

스코프 규칙을 잘 이해하고 있어야 코드의 에러를 방지할 수 있습니다.