logo

DowanKim

12. 함수 표현식

2026년 4월 10일

자바스크립트

1. 함수 표현식의 기본 개념

함수 표현식은 함수를 생성하고 변수에 할당하는 방식입니다. 자바스크립트 엔진은 함수를 하나의 으로 보기 때문에, 변수에 숫자를 할당하듯 함수도 할당할 수 있습니다.

// 함수 표현식 let sayHi = function() { alert("Hello"); }; // 함수는 값이기 때문에 복사도 가능합니다. let func = sayHi; func(); // Hello sayHi(); // Hello

💡 세미콜론(;)의 유무

함수 선언문 끝에는 세미콜론이 없지만, 함수 표현식 끝에는 세미콜론이 붙습니다. 이는 함수 표현식이 let 변수 = 값; 이라는 구문의 일부이기 때문입니다.


2. 콜백 함수 (Callback Function)

함수를 값으로 취급하기 때문에 가능한 가장 강력한 기능 중 하나가 콜백 함수입니다. 함수를 다른 함수의 인수로 전달하고, 나중에 "호출(called back)"하도록 하는 기법입니다.

  • 익명 함수(Anonymous Function): 이름 없이 선언된 함수로, 주로 콜백으로 전달될 때 일회성으로 사용됩니다.
function ask(question, yes, no) { if (confirm(question)) yes(); else no(); } // 익명 함수를 콜백으로 전달 ask( "동의하십니까?", function() { alert("동의하셨습니다."); }, function() { alert("취소하셨습니다."); } );

3. 함수 선언문 vs 함수 표현식 비교

두 방식은 동작 방식과 사용 가능한 시점에서 큰 차이를 보입니다.

비교 항목함수 선언문 (Declaration)함수 표현식 (Expression)
문법function f() { ... }let f = function() { ... };
생성 시점스크립트 실행 전 (엔진 초기화 단계)실행 흐름이 해당 코드에 도달했을 때
호출 시점선언부보다 위에서 호출 가능 (호이스팅)선언 이후에만 호출 가능
스코프엄격 모드 시, 선언된 블록 내에서만 유효블록 밖 변수에 할당하여 블록 외부에서도 접근 가능

4. 블록 스코프와 조건부 함수 선언

엄격 모드(use strict)에서 함수 선언문은 자신이 선언된 블록(예: if문 안) 내부에서만 유효합니다. 블록 밖에서 함수를 사용해야 한다면 함수 표현식을 사용해야 합니다.

let age = prompt("나이를 알려주세요.", 18); let welcome; if (age < 18) { // 블록 안에서 표현식으로 할당 welcome = function() { alert("안녕!"); }; } else { welcome = function() { alert("안녕하세요!"); }; } welcome(); // 정상 동작

🎙️ 기술 면접 대비 (Interview Questions)

Q1. 함수 선언문과 함수 표현식의 '호이스팅(Hoisting)' 차이를 설명해 주세요. (중급)

답변: 자바스크립트 엔진은 스크립트 실행 전 초기화 단계에서 모든 함수 선언문을 찾아 먼저 생성합니다. 따라서 선언 전에도 호출이 가능합니다. 반면 함수 표현식은 실행 흐름이 해당 줄에 도달했을 때 함수가 생성되므로, 선언 이전에는 접근하거나 호출할 수 없습니다.

Q2. 어떤 상황에서 함수 표현식을 사용하는 것이 더 유리한가요? (중급)

답변: 주로 두 가지 상황입니다. 첫째, 조건에 따라 함수를 다르게 정의해야 하고 그 함수를 블록 밖에서도 사용해야 할 때입니다. 둘째, 함수를 다른 함수의 인수로 전달하는 '콜백 함수'를 익명 함수 형태로 간결하게 작성할 때 매우 유리합니다.