일급객체로서의 함수

최재홍·2023년 4월 4일
0

자바스크립트에서 함수는 일급 객체(First-Class Object)라고 한다.

함수는 JS에서 일급객체로 취급받기 때문에 객체처럼 활용될 수 있고, 객체들에 일반적으로 적용 가능한 연산을 모두 지원하게 된다. 그래서 생겨난 일반적인 특징이 다음과 같다.

  1. 변수에 함수를 할당할 수 있다.
  2. 함수를 인자로 다른 함수에 전달할 수가 있다.
    =>(콜백함수)
  3. 함수가 함수를 반환할 수 있다.
    =>(고차함수)

1. 변수에 함수를 할당할 수 있다.

const sayHello = function() {
	console.log('hello!');
};

sayHello();
>"hello!"

2. 함수를 인자로 다른 함수에 전달할 수가 있다.

콜백 함수는 어떠한 함수의 매개변수로 쓰이는 함수를 말한다.

function callFunction(func) {
	func();
}

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

callFunction(sayHello);
>"Hello!"

3. 함수가 함수를 반환할 수 있다.

함수는 다른 함수에서 반환될 수 있다. 함수는 값으로 취급되기 때문이다.

function createAdder(num) {
	return function(x) {
    	return x + num;
    }
}

const addFive = createAdder(5);
console.log(addFive(10))
> 15

이 일련의 과정이 마음에 좀 와닿지가 않는데 풀어서 설명하면 다음과 같다. 우선 addFive라는 변수명에 createAdder()라는 함수에 매개변수로 5가 들어간 createAdder(5)의 리턴값이 할당되었기 때문에 리턴값을 보면 createAdder(5)의 리턴값은 "function(x) {return x + 5}"이기 때문에 addFive라는 변수 또한 x를 매개변수로 한 함수라고 이해할 수 있을 것이다. 그러므로 addFive(10)은 15라고 최종적으로 이해할 수 있다.

이외에도 함수는 일급객체이기 때문에

  1. 객체의 프로퍼티로 (객체가 할당될 수 있듯이)함수를 할당할 수 있고
  2. 배열의 요소로 (객체를 할당할 수 있듯이)함수를 할당할 수 있다.

0개의 댓글