자바스크립트에서 함수는 객체이다.
함수도 사실 생성자 함수를 가지고 만들어진다.
함수의 생성자 함수
new Function (arg1, arg2, ... argN, functionBody)
생성자 함수로 만든 multiply 객체(함수)
const multiply = new Function('num1', 'num2' ,'return num1 * num2')
JS에서 함수는 호출이 가능한 특별한 객체이다.
multiply(2, 5) // 10
/*
* 위에서 선언한 함수는 아래랑 같은거다.
* function multiply(num1, num2) {
* return num1 * num2
* }
*
*/
따라서, 우리는 함수를 변수에 할당할 수도 있고,인자로 전달할 수도 있으며
함수에서 함수를 반환(return)할 수도 있다.
// 1. 변수에 할당
const a = function(b) { // 2. 함수를 인자로 전달
return b // 3. 함수에서 함수를 반환.
}
const b = function() {
console.log('hi')
}
a(b)(); // 'hi'
Higher Order Function(고계 함수)
: 인자로 함수를 받거나 다른 함수를 반환하는 함수를 고계 함수라고 한다.
const multiplyBy = function(x) {
return function(y) {
return x * y
}
}
// const multiplyBy = x => y => x*y
const multiplyTwo = multiplyBy(2)
const multiplyTen = multiplyBy(10)
multiplyTwo(5) // 10
multiplyTen(5) // 50
여기까지 자바스크립트에서 함수는 객체라는 것을 알아보았고,
이를 응용해서 고계함수를 만들어 보았다.
다음 시간에는 클로저에 대해 소개해보겠다.