함수 선언형, 함수 표현식

HanHyuk·2023년 12월 26일

함수 선언형

  • 호이스팅 : 함수 선언형은 호이스팅됩니다. 함수를 선언하기 전 호출이 가능
  • 구문 : function functionName() {...} 형태로 선언
  • 스코프 : 함수 또는 전역 스코프에 정의
//호출
helloWorld();

// --- 중간 코드 ---

// 선언
function helloWorld() {
  console.log('헬로월드');
}

함수 표현식

  • 호이스팅 되지 않음 : 변수의 호이스팅 규칙을 따름, 함수 자체는 호이스팅 되지 않아 선언 전에 호출할 수가 없음
  • 구문 : var 또는 let, const functionName = function() {}
  • 익명 또는 명명된 함수 : 함수 표현식은 익명 함수로 사용될 수도 있고 이름을 가진 함수로 사용될 수도 있습니다.
  • 스코프 : 변수가 선언된 스코프에 종속
// 호출 시도 (오류 발생)
helloWorld();

// 선언
var helloWorld = function() {
  console.log('Hello World!');
};

// 호출
helloWorld();

주요 차이점

함수 선언형함수 표현식
호이스팅호이스팅되어 선언 전에 호출이 가능호이스팅 되지 않아 선언 전에 호출 불가능
익명성불가능익명으로 사용 가능
사용 시나리오전역 함수나 재사용 가능한 함수를 정의할 때 주로 사용콜백, 이벤트 핸들러 IIFE 등의 경우에 자주 사용

함수의 익명성

  • 함수가 이름을 가지지 않는다는 것을 의미, 이름이 지정되지 않으므로 함수 내부에서 자기 자신을 참조할 수 없음
  • 함수 표현식의 형태로 사용
  • 즉시 실행 함수 표현(IIFE)에서 자주 사용
    - IIFE : 정의되자마자 실행되는 함수
  • 이벤트 핸들러, 타이머 함수('setTimeout', setInterval'), Promise의 .then(), .catch() 등에서 콜백 함수로서 널리 사용
// 익명 함수 표현식
let myFunction = function() {
  console.log('Hello World!');
};

// 즉시 실행 함수 표현 (IIFE)
(function() {
  console.log('This is IIFE!');
})();

// 콜백 함수로서의 익명 함수
setTimeout(function() {
  console.log('Executed after 1 second');
}, 1000);

명명된 함수 vs 익명 함수

  • 명명된 함수(Named Function)는 함수 이름을 가지며 재귀 호출이나 디버깅에 유용
  • 익명 함수(Anonymous Function)는 이름이 없어 특정 상황(콜백 등)에서 코드를 간결하게 유지하는 데 유용
  • 특정 상황에서 코드의 간결성을 높이고 즉시 실행이나 일회성 콜백 함수를 작성하는 데 효과적임
  • 재사용 가능하거나 재귀적인 함수를 작성할 때는 명명된 함수를 사용하는 것이 적합
profile
선한 영향력을 펼치는 개발자가 되겠습니다.

0개의 댓글