일급객체란?
1) 값으로 사용될 수 있고
2) 변수에 할당할 수 있고
3) 함수의 리턴값으로 사용할 수 있고
4) 함수의 인자로 전달할 수 있는 객체를 말한다.
javascript에서 함수는 일급객체이다.
따라서
1) 함수를 값으로 사용할 수 있고
2) 함수를 변수에 할당할 수 있고
3) 함수의 리턴값으로 함수를 사용할 수 있고
4) 함수의 인자로도 함수를 전달할 수 있다.
고차함수
함수를 값으로 다룰 수 있다는 의미는
고차함수를 사용할 수 있다는 의미이기도 하다.
고차함수란 함수가 함수를 인자로 받는 것을 말한다.
const test = f ⇒ f(1);
/**
* 익명함수(f => f(1))를 test 변수에 할당했다.
* 함수의 인자로 함수를 전달했다(f)
* 이 함수는 함수를 인자로 받아 1을 인자로 전달하는 함수다.
*/
const apply3 = f ⇒ f(3) // 함수를 인자로 받아 3을 할당하는 함수
const multiply2 = a ⇒ a * 2 // 값을 받아 2를 곱해주는 함수
console.log(apply3(multiply2)) // 6 이 된다.
// console.log(apply3(a ⇒ a*2))와 동일한 의미
이렇게 함수가 함수를 받아서 실행하게 할 수 있다.
클로저
또 함수가 일급객체라는 특성으로 클로저를 사용할 수 있는데,
클로저는 함수가 만들어질 때의 환경을 기억하기 때문에, 동적인 함수를 만들 수 있다.
const multiflyFunc = a ⇒ b ⇒ a * b;
const multifly3 = multiflyFunc(3) // b => 3 * b 와 같다. 받은 값에 3을 곱해주는 함수가 되었다.
console.log(multifly3(5)) // 15
위 예제가 이중 화살표 함수때문에 좀 복잡할 수 있어서 풀어서 써봤다.
// const multiplyFunc = a ⇒ b ⇒ a * b;
const multiplyFunc = function(a) {
return function(b) {
return a * b;
}
}
// const multifly3 = multiplyFunc(3)
const multifly3 = function() {
const a = 3; // 이렇게 입력에 3이 고정된 함수가 만들어지는 것과 같다.
return function(b) {
return a * b;
}
}
// 결국 아래와 같은의미
const multifly3 = function(b) {
return 3 * b;
}
// multifly3(5)
function(5) {
return 3 * 5;
}
'Web development > Node.js & Typescript' 카테고리의 다른 글
[Javascript] map vs filter vs reduce (0) | 2020.02.11 |
---|---|
[Javascript] List/Set/ Map 순회하기 (0) | 2020.02.09 |
Error: listen EADDRINUSE: address already in use :::3001 (0) | 2020.02.05 |
Express의 오류 처리 (0) | 2020.01.31 |
map 안에서 async/await 사용시 Promise가 리턴되는 문제 (0) | 2020.01.23 |
댓글