[javascript] 함수 선언문과 함수 표현식의 실행 컨텍스트 동작은 어떻게 달라지는가?

만약 함수 선언문을 사용하면, 해당 함수는 호이스팅(hoisting)됩니다. 이는 함수가 스코프 내 최상단으로 끌어올려지고, 전체 코드 내에서 어디서든 호출할 수 있다는 것을 의미합니다. 함수 표현식은 호이스팅되지 않습니다.

아래는 함수 선언문과 함수 표현식의 예시입니다.

// 함수 선언문
function sayHello() {
  console.log("안녕하세요!");
}

// 함수 표현식
var sayGoodbye = function() {
  console.log("안녕히 가세요!");
};

일반적으로, 함수 선언문은 코드 블록 내부에 있지 않아도 함수가 코드 블록 내에서 호출될 수 있습니다. 그러나 함수 표현식은 변수를 통해 함수가 할당되어야 호출될 수 있습니다.

이러한 차이점으로 인해, 함수 선언문과 함수 표현식은 실행 컨텍스트에서 다르게 동작하며, 호이스팅의 처리 방식이 상이합니다.