티스토리 뷰
자바스크립트 함수를 정의(생성)하는 방법은 3가지가 있다.
1 ) 함수 선언문(Function statement) / 선언적 함수 : function 키워드로 함수를 정의
2 ) 함수 표현식(Function expression) : function 키워드로 함수를 정의, 추가적으로 자바스크립트에서 함수는 일급 객체(함수를 하나의 값처럼 취급)이기 때문에 변수에 함수를 할당할 수 있음.
함수 표현식은 2가지로 나눌 수 있다.
2 - 1 ) 익명 함수 : 함수 이름이 없음, 변수명을 이용해서 함수 호출.
2 - 2 ) 기명 함수 : 함수 이름이 있음, 단, 함수 호출 시, 변수명을 이용해서 함수 호출.
함수 이름으로 함수 호출 시, ReferenceError가 발생.
아래의 코드를 살펴보자!
// 기명 함수(이름이 있는 함수)
var minus = function subtraction(x, y) {
return x - y;
}
// 자바스크립트 엔진은 기명 함수를 아래와 같이 변경한다
var minus = function minus(x, y) {
return x - y;
}
변수명, 함수 이름이 같아 보이기 때문에 함수 이름을 이용해서 함수를 호출하는 것처럼 보일 수 있지만, 변수명을 이용해서 함수를 호출을 하는 것임!
3 ) 함수 생성자 : 자바스크립트에 내장된 함수 생성자로 new 키워드와 함께 함수를 생성.
익명 함수(Anonymous Function)?
: 이름이 없는 함수.
익명 함수는 어떻게 호출할 수 있을까?
: 일반적으로 함수 호출 시, 함수 이름(); 실행시킨다. 하지만 익명함수는 함수 선언문처럼 명시적으로(함수 이름 이용)호출을 할 수 없다.
방법 1 ) 함수 표현식을 사용한다
var anonymous = function(){
console.log('Anonymous');
}
anonymous(); // 'Anonoymous'
방법 2 ) 즉시 실행 함수(immediately invoked function expression [IIFE]) 사용 한다.
(function() {
console.log('Anonymous');
})(); // 'Anonymous'
익명 함수의 장점
음...익명 함수를 아무 생각없이 사용해서 잘 와닿지 않지만!
함수 이름 작성을 위해서 고민할 필요가 없다.
즉, 단순히 함수의 기능만 필요할 경우 익명 함수를 사용하면 좋다고 생각한다.
이름이 굳이 필요하지 않으니깐!
익명 함수의 단점
1 ) 디버깅을 더 복잡하게 만들 수 있다
2 ) 필요 시, 재사용할 수 없다
3 ) 호이스팅에 영향을 받지 않기 때문에 에러 발생한다.