[Javascript] 함수 선언식과 함수 표현식

April 28, 2021 · 2 mins read label-icon Javascript

함수 선언식

  • Function Declaration
  • 함수를 함수명과 함께 선언하는 것
  • 일반적인 함수 정의 방법
1
2
3
4
function func(){
    console.log('func 실행!')
}
func(); // func 실행!

함수 표현식

  • Function Expression
  • 함수를 별도의 변수에 할당하는 것
  • 함수명을 정의하지 않은 함수 표현식은 익명 함수 표현식
  • 함수명을 정의한 함수 표현식은 기명 함수 표현식
1
2
3
4
5
6
7
8
9
10
11
12
13
// 익명 함수 표현식
var func1 = function(){
    console.log('func1 실행!')
}
func1(); // func1 실행!


// 기명 함수 표현식
var func2 = function func3 (){
  console.log('func2 실행!')
}
func2(); // func2 실행!
func3(); // ReferenceError : func3 is not defined

차이점

1. 선언 방식

  • 변수에 함수를 할당하는지의 차이가 있다.

2. 호이스팅

  • 함수 선언식함수 전체를 호이스팅 한다.
  • 함수 표현식은 함수를 할당한 변수 선언부만 호이스팅 한다.
1
2
3
4
5
6
7
8
9
10
func1(); // 함수1 실행!
func2(); // TypeError : func2 is not a function

function func1(){
  console.log('함수1 실행!')
}

var func2 = function(){
  console.log('함수2 실행!')
}

참고

코어 자바스크립트 (정재남 저)
https://ko.javascript.info/function-expressions