Fundamentals/JavaScript
함수 선언문의 스코프
sod0l
2024. 9. 12. 12:03
1. 함수 선언문은 함수 블록에서만 지역 스코프를 가진다.
- 함수 선언문은 함수 내부에서만 지역변수처럼 동작한다. 즉, 함수 안에서 선언된 함수는 해당 함수 안에서만 접근 가능하다.
- 하지만 함수가 아닌 일반인 블록문(`if`, `for`, `while`등) 안에서 선언된 함수는 블록 내에서만 유효하지 않고, 블록 바깥에서도 접근할 수 있다.
2. 코드 예시로 이해해 보면
2-1. 함수 블록 안에서의 함수 선언문 (지역 스코프를 가짐):
함수 선언문은 함수 블록 내에서는 지역적으로 작동한다. 즉, 그 함수에서만 유효하다.
function outerFunction() {
function innerFunction() {
console.log("This is inner function");
}
innerFunction(); // 호출 가능
}
outerFunction(); // outerFunction 호출
// innerFunction(); // Error: innerFunction is not defined
- `innerFunction`은 `outerFunction` 내부에 선언된 함수로, `outerFuction` 안에서만 호출할 수 있다.
- `outerFunction` 외부에서는 `innerFunction`을 호출할 수 없으므로 에러가 발생한다.
2-2. if문 또는 for문 같은 블록문 내 함수 선언문 (블록 스코프가 없음):
JavaScript에서는 `if`나 `for` 같은 블록문 내부에 선언된 함수도 사실 블록 스코프를 따르지 않고, 함수 스코프를 따른다.
if (true) {
function sayHello() {
console.log("Hello!");
}
}
sayHello(); // 호출 가능
- `sayHello` 함수가 `if` 블록 안에 선언되었지만, 블록이 끝난 후에도 호출 가능하다. 이는 JavaScript에서 함수 선언문이 함수 스코프를 따르기 때문이다. 블록 스코프는 적용되지 않는다.
결론
- 함수 선언문은 함수 블록 내에서만 지역 스코프를 가진다.
- 하지만, if문이나 for문 같은 블록문 안에서는 함수 선언문이 해당 블록에 제한되지 않고 함수 스코프를 따른다.