함수 표현식 vs 함수 선언문

박재현·2024년 2월 29일
1

JavaScript 공부

목록 보기
9/14
post-thumbnail

함수 표현식 vs 함수 선언문

함수 표현식과 선언문의 차이에 대해 알아봅시다.

첫번째 차이는 문법.

  • 함수 선언문: 주요 코드 흐름 중간에 독자적인 구문 형태로 존재
function sum(a, b) {
	return a + b;
}
  • 함수 표현식: 할당 연산자 =을 이용해 만든 할달 표현식 우측에 생성 (등호= 가 사용되었으니 식이 된다는 듯?)
let sum = function(a, b) {
	return a + b;
}

두번째 차이는 자바스크립트 엔진이 언제 함수를 생성하는지다.

함수 표현식은 실제 실행 흐름이 해당 함수에 도달했을때 함수를 생성한다. 따라서 실행 흐름이 함수에 도달했을 때부터 해당 함수를 사용할 수 있다.

위 예시로 보면 스크립트가 실행되고, 실행 흐름이 let sum = function...에 도달했을때 함수가 생성이되고, 이 이 후부터 함수를 사용할 수 있다.

하지만 함수 선언문은 함수 선언문이 정의되기 이전에도 호출할 수 있다.

따라서 전역 함수 선언문은 스크립트 어디에 있느냐에 상관없이 어디서든 사용할 수 있다.

이게 가능한 이유는 자바스크립트의 내부 알고리즘 때문인데, 자바스크립튼느 스크립트를 실행하기 전, 준비단계에서 전역에 선언된 함수 선언문을 찾고 → 해당 함수를 생성한다.

즉 스크립트가 진짜 실행되기 전 "초기화 단계"에서 함수 선언 방식으로 정의한 함수가 생성된다는 것. (이게 호이스팅인가 뭔가하는 그건가?)

스크립트는 함수 선언문이 모두 처리된 이후에서야 실행되기때문에, 스크립트 어디서든 함수 선언문으로 선언한 함수에 접근할 수 있다.

ℹ️ 함수 선언문과 함수 표현식 중 무엇을 선택해야 하나?
함수 선언문으로 함수를 정의하면, 함수가 선언되기 전에 호출할 수 있어서 코드 구성을 좀 더 자유롭게 할 수 있다.
또, 함수 선언문을 사용하면 가독성도 좋아지는데 let f = function(...) {...} 보다 function f(...) {...} 을 찾는게 더 쉽고 더 눈길을 사로잡는다.
그러나 어떤 이유로 함수 선언 방식이 적합하지 않다면 함수 표현식을 사용해야 한다.


참고

profile
기술만 좋은 S급이 아니라, 태도가 좋은 A급이 되자

0개의 댓글

관련 채용 정보