자바스크립트에서 함수는 변수와 마찬가지로 유효 범위(scope)를 가지고 있습니다. 이는 함수 내부에서 선언한 변수들이 해당 함수 내에서만 접근 가능하다는 것을 의미합니다. 자바스크립트에서는 전역 범위와 지역 범위의 두 가지 유효 범위를 지원합니다.
전역 범위 (Global Scope)
전역 범위는 프로그램 전체에 적용되는 범위로, 어디에서든 접근할 수 있는 변수를 의미합니다. 전역 범위에서 선언된 변수는 모든 함수 내에서 사용할 수 있습니다. 하지만 전역 변수는 너무 많아지면 코드의 가독성을 낮출 수 있으며, 예기치 않은 문제를 발생시킬 수도 있습니다.
// 전역 범위 변수
var globalVariable = "This is a global variable";
function exampleFunction() {
console.log(globalVariable); // "This is a global variable"
}
exampleFunction();
지역 범위 (Local Scope)
지역 범위는 함수 내부에서 선언된 변수들의 범위로, 해당 함수 내에서만 접근 가능합니다. 여러 함수에서 같은 이름의 지역 변수를 선언할 수 있으며, 각 함수 내에서만 유효합니다. 이를 통해 변수의 충돌을 방지하고, 함수별로 독립적인 값을 유지할 수 있습니다.
function exampleFunction() {
// 지역 범위 변수
var localVariable = "This is a local variable";
console.log(localVariable); // "This is a local variable"
}
exampleFunction();
console.log(localVariable); // ReferenceError: localVariable is not defined
##함수 유효 범위 (Function Scope)
자바스크립트에서 함수는 다른 함수 내에서 정의될 수 있습니다. 이 때, 내부 함수는 외부 함수의 변수에 접근할 수 있는데, 이를 함수 유효 범위 (function scope)라고 합니다.
function outerFunction() {
var outerVariable = "This is an outer variable";
function innerFunction() {
console.log(outerVariable); // "This is an outer variable"
}
innerFunction();
}
outerFunction();
console.log(outerVariable); // ReferenceError: outerVariable is not defined
앞의 예제에서 innerFunction
은 outerFunction
의 변수 outerVariable
에 접근할 수 있습니다. 하지만 외부에서는 outerVariable
에 접근할 수 없으므로, 마지막 console.log
는 에러를 발생시킵니다.
블록 범위 (Block Scope)
ES6 이후의 자바스크립트에서는 블록 범위인 let
과 const
를 지원합니다. let
과 const
로 선언된 변수는 해당 블록 내에서만 유효하며, 블록 외부에서 접근할 수 없습니다.
function exampleFunction() {
if (true) {
let blockVariable = "This is a block scoped variable";
console.log(blockVariable); // "This is a block scoped variable"
}
console.log(blockVariable); // ReferenceError: blockVariable is not defined
}
exampleFunction();
블록 범위 변수인 blockVariable
은 if
문 블록 내에서만 유효하며, 블록 외부에서는 접근할 수 없습니다.
결론
자바스크립트 함수의 유효 범위는 변수가 해당 함수 내에서만 접근 가능하다는 것을 의미합니다. 전역 범위, 지역 범위, 함수 유효 범위, 그리고 블록 범위 등 다양한 유효 범위를 통해 변수의 범위를 제어할 수 있습니다. 이를 적절히 활용하여 코드의 가독성과 유지 보수성을 높일 수 있습니다.