이 번역은 완료되지 않았습니다. 이 문서를 번역해 주세요.

프로그래밍 언어는 해당언어의 함수가 다른 변수처럼 취급될 때 First-class 함수가 있다고합니다. 예를 들어, 이러한 언어에서 함수는 다른 함수에 인수로 전달될 수 있고 다른 함수에서 반환될 수 있으며 변수에 값으로 할당될 수 있습니다.

예시 | 변수에 함수 할당

JavaScript

const foo = function() {
   console.log("foobar");
}
// 변수를 사용하여 호출
foo();

우리는 익명함수를 변수에 할당한 다음, 그 변수를 사용하여 끝에 괄호 ()를 추가하여 함수를 호출했습니다.

함수의 이름이 지정되었더라도, 변수 이름을 사용하여 함수를 호출할 수 있습니다. 이름을 지정하면 코드를 디버깅할 때 유용합니다. 하지만 우리가 호출하는 방식에는 영향을 미치지 않습니다.

예시| 함수를 인자로 전달

JavaScript

function sayHello() {
   return "Hello, ";
}
function greeting(helloMessage, name) {
  console.log(helloMessage() + name);
}
// `sayHello`를 `greeting` 함수에 인자로 전달
greeting(sayHello, "JavaScript!");

우리는 sayHello() 함수를 greeting() 함수의 인자로 전달했습니다. 이것은 우리가 함수를 변수처럼 다룬다는것을 설명합ㄴ디ㅏ.

우리가 다른 함수에 인자로 넘긴 함수는 Callback 함수 라고 불립니다. sayHello 는 Callback 함수입니다.

예시| 함수 반환

JavaScript

function sayHello() {
   return function() {
      console.log("Hello!");
   }
}

이 예시문에서는 함수가 함수를 반환해야합니다. - JavaScript에서는 함수를 변수처럼 취급하기 때문에 함수를 반환할 수 있습니다.  

함수를 반환하는 함수를 Higher-Order Function이라고 부릅니다. 

다시 예시로 돌아가서 우리는 sayHello 함수를 실행하고 이것은  익명 함수를 반환합니다. 이렇게 하기 위해서는 이렇게 두가지 방법이 존재합니다.

1- 변수 사용

const sayHello = function() {
   return function() {
      console.log("Hello!");
   }
}
const myFunc = sayHello();
myFunc();

Hello! 메시지를 반환합니다.

다른 변수를 사용해야합니다. 만약에 sayHello 함수를 직접 호출하면, 반환된 함수를 호출하지않고 함수 자체를 반환할 것입니다.

2- 이중 괄호 사용

function sayHello() {
   return function() {
      console.log("Hello!");
   }
}
sayHello()();

이중 괄호 ()()를 사용하여 반환된 함수도 호출합니다.

더 배우기

일반 지식

문서 태그 및 공헌자

이 페이지의 공헌자: cs09g, seflix
최종 변경자: cs09g,