본문 바로가기

Dev-/java script, jQuery, Ajax

자바 스크립트 함수 선언방식의 차이

1. 함수 리터럴

function func() {
...
}

2. 함수 표현식(변수에 할당)

let func = function() {
...
};

3. 함수 선언문

/**
* 선언보다 나중에 함수가 정의되어도 실행이 된다.
* (함수 호이스팅)
*/
func();

function func() {
...
}


위 방식에는 주요한 차이점 2가지가 존재한다.

1. ';'의 작성 권고 유무

- 1.은 블럭의 의미

- 2.는 변수 선언의 의미이므로 만일의 경우 심각한 에러를 불러올 수 있다.

2. 사실 2번은 내부적으로 아래와 같이 변형된 후 사용된다.

let func = function func() {
...
};

그래서 func()와 같이 외부에서 호출해서 쓸 수 있는 것.


3. 3.은 함수 호이스팅이 가능

-  권장되지 않음




아래는 참조

- 일반적으로 함수 표현식을 통해 변수에 할당하는 방법에서 함수의 이름을 익명으로 정해주는 경우가 많으나,

함수 내에서 재귀적인 호출이 필요할 경우, 이름을 지정해준다.

func();     /** O */

let func = function funcFunc() {
funcFunc(); /** O(내부에서만 호출 가능) */
...
};

funcFunc(); /** X(외부에서 호출 불가) */