언어(Programming Language)/JavaScript

[JavaScript] 함수 표현식&선언식, 화살표 함수(arrow function)

RyanSin 2021. 12. 29. 15:07
반응형

- 지난 시간

안녕하세요. 지난 시간에는 JavaScript 함수(function)에 대해 알아봤습니다. 혹시 놓치고 오신 분들은 아래 링크를 통해 학습하고 오시는 걸 추천드리겠습니다.

 

[JavaScript] 함수(function) 정의 및 사용법

 

- 개요

지난 시간에 작성한 함수에 방식은 함수 선언식이라고 합니다. 

 

JavaScript에는 선언식 방법이 아닌 표현식과 화살표 함수도 지원합니다. 차근차근 하나씩 설명드리겠습니다.

 

1. 함수 선언식 & 함수 표현식

/**
 * @author Ryan
 * @description 함수 선언문
 */
function sayApeach() {
  console.log("Apeach")
}

/**
 * @author Ryan
 * @description 함수 표현식
 */
const sayRyan = function () {
  console.log("Ryan")
}

sayApeach()
sayRyan()

/**
 * - 실행결과 -
 * Apeach
 * Ryan
 */

 

JavaScript는 일급 객체 언어이기 때문에 변수에 함수를 할당할 수 있다고 지난 시간에 보여드렸습니다.

 

함수 표현식은 함수 이름을 없애고 변수에 함수를 할당해서 사용합니다.

 

실행 결과 두 함수 모두 잘 출력됩니다. 둘 다 사용하는데 문제가 없는데... 아무거나 사용해도 상관이 없지 않을까요?

 

사실 두 함수에 차이는 호출 가능 범위가 다릅니다.

 

  • 함수 선언문 : 어디서든 호출이 가능
  • 함수 표현식 : 함수를 생성(초기화) 한 코드 아래에서만 호출 가능

 

예시로 바로 보여드리겠습니다.

 

sayApeach()
sayRyan()

/**
 * @author Ryan
 * @description 함수 선언문
 */
function sayApeach() {
  console.log("Apeach")
}

/**
 * - 실행결과 -
 * Apeach
 */

/**
 * @author Ryan
 * @description 함수 표현식
 */
const sayRyan = function () {
  console.log("Ryan")
}

/**
 * - 실행결과 -
 * sayRyan()
 * ReferenceError: Cannot access 'sayRyan' before initialization
 */

 

두 함수 모두 함수를 생성하기 전에 함수를 호출했습니다.

 

결과를 확인하면 sayApeach(함수 선언식)은 Error가 발생하지 않았습니다. 하지만 sayRayn(함수 표현식)은 Error가 발생했습니다.

 

함수 선언식으로 선언된 함수는 사용 가능 범위가 해당 파일에 가장 위로 올라갑니다. 이 부분은 JavaScript에서 호이 스팅(hoisting)이라고 합니다. [호이스팅(hoisting)에 대해서는 다음에 학습하겠습니다.]

 

하지만 함수 표현식은 그렇지 않습니다. 둘에 차이는 이러한 부분이 있습니다.

 

2. 화살표(arrow) 함수

화살표 함수는 함수 표현식과 호이스팅이 동일합니다. 함수를 선언한 뒤 사용해야 Error가 발생하지 않습니다.

 

하지만 사용법이 다르기 때문에 예시로 설명드리겠습니다.

/**
 * @author Ryan
 * @description 중괄호({})가 있는 화살표 함수
 */
const sayApeach = () => {
  console.log("Apeach")
}
/**
 * @author Ryan
 * @description 중괄호({})가 없는 화살표 함수 결과물 바로 리턴
 */
const sayRyan = () => "Ryan"

sayApeach()
console.log(sayRyan())

/**
 * - 실행결과 -
 * Apeach
 * Ryan
 */

화살표 함수는 function 키워드를 제거하고 사용합니다. 또한 중괄호를 제거하면 바로 데이터를 반환합니다.

 

함수 사용법과 동일하기 때문에 엄청 어렵지는 않습니다.

 

이번 시간에는 함수 선언식, 표현식 그리고 화살표 함수에 대해 알아봤습니다.