[Javascript] 함수를 생성하는 방법들
자바스크립에서 함수를 생성하는 방법은 세 가지가 있다. 이 방법들은 같은 함수를 생성하지만 동작방법이 조금 다르다.
1. 함수 선언문
2. 함수 표현식
3. Function() 생성자 함수
1. 함수 선언문
함수 선언문은 반드시 함수명이 정의되어 있어야 한다.
ex) function a(){}
2. 함수 표현식
함수 표현식은 리터럴 방식으로 함수명이 없는 익명 함수를 만들고 그 함수를 변수에 담아서 사용하는 것이다.
ex) var a = function(){}
함수명이 있는 함수를 기명 함수 표현식이라고 하는데 만약 기명 함수 표현식을 함수 표현식으로 사용할 때는 함수명을 사용하면 안 된다.
ex) var b = function bb(){}
bb; // is not defined 에러가 발생한다.
3. Function() 생성자 함수
말 그대로 Function() 생성자 함수를 이용하여 함수를 만드는 방법이다.
ex) var a = new Function();
*비교 1
함수 선언문이나 함수 표현식으로 함수를 만들 때 함수 리터럴 방식으로 만들지만 내부적으로는 Function() 생성자 함수를 이용하여 만들어지는데 일반적으로 Function() 생성자 함수를 사용한 함수 생성 방법은 잘 사용되지 않는 다고 한다.
*비교 2
함수 선언문은 호이스팅을 무시하기 때문에 코드의 구조를 엉성하게 만들 수 있도 있다. 때문에 더글라스 크락포드님이 저서를 통해 함수 표현식만을 사용할 것을 권하고 있다.
ex)
add(1,2) // 3
function add(a, b) { return a + b; }
add(1,2) // 3
min(2,1) // is not a function 에러 발생
var min = function(a, b) { return a - b; }
min(2,1) // 1