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문 같은 블록문 안에서는 함수 선언문이 해당 블록에 제한되지 않고 함수 스코프를 따른다.