JavaScript

일반함수와 익명함수

차차한 2024. 4. 9. 15:21

자바스크립트의 함수 선언 방식은 기본적으로 일반 함수와 익명 함수로 나눌 수 있다.

 

1. 일반 함수

일반 함수는 함수 선언식이라고 하며

일반적으로 다른 언어에서 사용하는 함수와 동일하다

function funcName(){
	alert("일반 함수 선언");
}

일반 함수는 호이스팅되어서 함수의 선언 위치에 제약이 없다.

funcName(); //alert작동

function funcName(){
	alert("일반 함수 선언");
}

funcName(); //alert작동

funcName 함수를 선언한 것보다 먼저 호출을 해도

호이스팅으로 인해 오류가 발행하지 않고 alert이벤트가 작동한다.

 

2. 익명 함수

익명 함수는 문자 그대로 함수의 이름이 존재하지 않는 함수다.

function(){
	alert("익명 함수 선언");
}

익명 함수는 한 번만 사용할 함수를 위한 개념이다.

일반적으로 변수에 담긴 형태로 사용을 한다.

let funcNm = function(){
	alert("익명 함수 선언");
}

funcNm();

이때 헷갈렸던 개념이, 왜 변수의 이름이 있는데 익명함수로 부를까? 라는 점이었다.

익명 함수는 변수가 있고 없고에 상관없이

함수자체 이름의 여부를 두고 판단한다!

function(){ 
	//익명함수
}

function funcNm(){
	//일반함수
}

이름의 유무와 같이 익명함수와 일반함수의 차이점은 호이스팅이 되는지 여부다.

일반함수는 호이스팅이 되지만, 익명함수는 호이스팅이 되지 않는다.

funcNm(); //에러 발생

let funcNm = function(){
	alert("익명 함수 선언");
}

funcNm();

익명함수를 선언하기 전에 해당 함수를 호출하면 에러가 발생하게 된다.

따라서 익명함수 사용 시 함수 선언 후에 해당 함수를 호출해야 한다.

 

3. 사용이유

익명함수를 쓰는 이유는 메모리 관리를 위해서다.

만약 모든 함수가 일반함수로 되어 있어서 모두 호이스팅이 된다고 하면

그 함수 중에는 한 번만 사용하는 함수도 다수 포함되어 있을 것이다

그렇게 되면 그 함수는 단 한 번의 사용을 위해 계속 메모리를 차지하고 있어야 한다.

 

때문에 재사용을 하지 않는 함수의 경우 

메모리를 효과적으로 관리하기 위해 

일반 함수가 아닌 익명함수로 구현하는 것이 좋다.