JS' 공부흔적

[JavaScript] 함수 선언문과 함수 표현식 본문

JavaScript

[JavaScript] 함수 선언문과 함수 표현식

이준수 2023. 4. 10. 10:24

함수 선언문

function a() {}

// 함수 호출 시
a();
  • 함수 이름 지정 필수
  • 호이스팅 되므로 함수 선언 전에 호출 가능

 

함수 선언문의 경우, 함수를 호출할 때 함수명을 사용하는 것처럼 보인다. 그러나 함수 이름은 함수 몸체 내에서만 참조할 수 있다.

그러면 어떻게 함수 이름을 사용하여 호출할 수 있을까?

 

사실은 함수 이름을 사용하여 호출하는 것이 아니다. 함수는 함수 이름으로 호출하는 것이 아닌, 함수 객체를 가리키는 식별자로 호출한다. 함수 선언문을 사용하면 자바스크립트 엔진이 암묵적으로 함수명과 동일한 이름의 식별자를 생성하고, 여기에 함수 객체를 할당한다. 따라서 위의 코드에서는 함수명 a로 함수를 호출하는 것이 아니라 a라는 식별자로 함수를 호출하는 것이다.


함수 표현식

var test = function a() {}

// 함수 호출 시
test();
  • 함수 이름을 지정하지 않아도 됨
  • 호이스팅 안 되므로 함수 선언 전에 호출 불가능

함수 표현식의 경우, 식별자를 직접 지정해주고, 이를 호출해야한다. 위의 코드에서 식별자는 test이다.

var test = function a() {}

console.log(test()); // 정상 작동

console.log(a()); // ReferenceError

 

추가로

함수를 호출할 때는 함수 선언이 우선시 되어야 한다. 그러나 함수 호이스팅은 이러한 규칙을 무시하는 것이므로, 함수 호이스팅이 발생하지 않는 함수 표현식 사용을 권장한다.

 

 

 

728x90
반응형