자바스크립트에서 함수를 만드는 방법은 대표적으로 두 가지가 있어요:
이 둘은 모양은 비슷해 보이지만, 호이스팅 동작과 선언 방식에서 중요한 차이가 있습니다.
sayHello(); // 👉 "Hello!"
function sayHello() {
console.log("Hello!");
}
function
키워드로 직접 함수 이름을 선언sayHi(); // ❌ TypeError: sayHi is not a function
const sayHi = function () {
console.log("Hi!");
};
자바스크립트는 코드를 실행하기 전에
그래서 선언문은 위에서 호출 가능하고, 표현식은 안 되는 거예요.
구분 | 함수 선언문 | 함수 표현식 |
---|---|---|
키워드 사용 방식 | function 함수이름() | const 변수 = function() |
호이스팅 | O (함수 전체가 올라감) | X (변수는 올라가지만 함수는 X) |
선언 전 호출 | 가능 | 불가능 (TypeError) |
사용 예시 | 전역 또는 일반 함수 정의용 | 조건부 정의, 콜백함수에 자주 사용 |
함수 선언문
→ 코드 어디서든 쓸 수 있게 하고 싶을 때
→ 주로 일반적인 함수 정의에 사용
함수 표현식
→ 특정 조건 안에서만 정의하거나
→ 콜백 함수나 동적으로 사용할 때 유용
헷갈릴 땐 이렇게 기억하세요:
"함수 선언문은 호이스팅돼서 먼저 써도 된다. 함수 표현식은 안 된다!"