JavaScript/Basic

6. 함수 선언과 return + 즉시 실행 함수

oniri1 2024. 8. 12. 21:36

함수를 선언하는 방법은 크게 2가지가 있다.

일반 함수

function 을 사용한 함수 선언 방법이다.

function 방법 1

function 이름 (매개변수){코드} 

예시 : function funcName (a){console.log(a)};

function 방법 2

const 이름 function (매개변수){코드} 

예시 : const funcName2 = function (a){console.log(a)};

일반 함수는 어떻게 선언하든 큰 차이는 없다

화살표 함수

()=>{} 을 사용한 함수 선언 방법이다.

화살표 방법 1

const 이름 = (매개변수) => {코드} 

예시 : const funcName = (a) => {console.log(a)};

const 없이 선언해도 작동을 하긴 하지만 절대로 사용하지 말자

매개변수란?

함수를 선언할 때 ()안에 넣는 것을 매개변수라고 한다!
해당 함수내에서만 선언되는 변수이며, 함수 호출시 인자를 받는 기준! 이라고 생각하면 된다.

const arrowFunc = (a,b) => {
  console.log(a,b);
};

arrowFunc("첫번째 인자","두번째 인자")

인자란?

인자이다.
호출하는 함수에 넘겨줄 값을 전달인자 라고 한다.

깊게 생각하지 말자!
그냥 a 와 b를 순서대로 선언했기 때문에 arrowFunc 호출시 ()안에서 ,를 기준으로 a,b에 인자가 전달된다.

지금처럼 순서 가 아닌 이름으로 할당 및 선언하는 {객체 구조분해 할당} 이라는 것도 있는데 나중에 설명하겠다.

함수 호출

내가 선언한 함수 이름에 ()를 붙이면 함수를 호출할 수 있다.

js에서 어떠한 변수명에 ()가 붙으면, 그것은 함수를 호출하여 사용함을 뜻한다.

즉, 내가 const a = 1 로 a를 선언했다고 했을 때
a()를 호출하면 a라는 이름의 함수를 찾기 때문에 a()는 함수를 찾을 수 없다는 오류를 내고 터진다!

올바른 선언 및 호출의 예시
function funcName(a) {
  console.log(a);
}
funcName("일반 함수");

const arrowFunc = (a) => {
  console.log(a);
};
arrowFunc("화살표 함수");

return이란?

함수는 코드를 실행시켜주는 역할도 하지만, 제일 중요한 건 역시 반환 값이다!

return은 제일 큰 두가지 특징이 있는데

  1. 함수를 종료
  2. 값을 반환

한번 사용해보자

const arrowFunc = (a) => {
  return a;
  console.log(a); //리턴이 실행 된 후의 코드는 실행되지 않는다.
};
arrowFunc("화살표 함수");


코드를 옮겨적기만 해도 console.log 부분의 색이 연해지는 것을 볼 수 있다.

즉 return이 종료된다면, 그 함수는 더이상 코드를 실행하지 않는다.

그렇다면 반환 된 값은 어떻게 사용할 수 있는가?
console.log의 경우 기본적으로 반환 된 값을 콘솔에 올리니 console.log(arrowFunc("화살표 함수")); 로 콘솔에 띄우는 것도 가능하며
기본적으로 아래와 같이 많이 사용한다.

const result = arrowFunc("화살표 함수");
console.log(result) //화살표 함수 가 출력된다.

함수가 리턴해주는 값은 우리가 변수로 선언할 수 있다.

즉시 실행 함수

지금부터 설명할 건, 딱히 알든 말든 크게 상관은 없는 함수 선언 및 사용법이다.
다만, 이런 방식도 있다는 것도 알고 갔으면 도움이 될거같아 작성하였다.

함수 선언은 함수의 이름이 없어도 선언이 가능한데, 그러면 그런 함수는 어떻게 호출해야 하는가?
즉시 실행 함수로 사용할 수 있다.

자주 사용하지는 않지만, 주로 테스트 단계에서 어쩌다가 한번은 사용하기도 한다..

(function (a) {console.log(a);})("이름 없는 일반 함수");

((a) => {console.log(a);})("이름 없는 화살표 함수");

방식은 (함수 선언)(인자) 다.

굳이 이해할 필요는 없어서 설명도 적진 않겠다.
그냥 이런 방식으로 사용할 수도 있구나, 하고 다음으로 넘어가보도록 하자!

쓸데없는 것에 메모리를 많이 할당 할 만큼 코딩은 여유롭지 못하다..