배열등의 흔한 자료구조를 이용해서 다수의 고계연산을 적용하여 원하는 결과를 얻는 방법.
const string = '123';
const numbers = string.split('').map((char) => parseInt(char,10));
위에서 map
과 같이 무슨 일을 할지 기술된 함수를 인수로 받는 함수, 연산을 고계 연산이라고 한다.
합성 함수. 이전 함수의 출력값이 다음 함수의 입력값이 된다는 점에서 함수 체이닝과 다르다.
const plus1 = (num) => num + 1;
const plus2 = (num) => num + 2;
const plus3 = (num) => num + 3;
const plus4 = (num) => num + 4;
const fs = [plus1, plus2, plus3, plus4];
const result = fs.reduce((acc, f) => f(acc), 0); // 10
여러개의 인수를 받는 함수를, 인수를 하나씩 받는 단항함수의 순차열로 바꾸는 것. 커링된 함수는 모든 인수를 받은 후에야 평가가 일어난다. 자바스크립트에서 인수를 주지 않으면 undefined 가 되면서 평가가 일어나는 것과 차이가 있다.
함수를 인자로 받거나 함수를 반환하는 함수를 말한다.
함수 스코프 내에 정의되어 있지 않은 변수를 자유변수
라고 부른다.
이런 자유변수를 포함하는 함수를 열린함수
라고 부른다.
function makeCounter() {
let count = 0;
function push() { // 열린함수
count++; // 자유변수
console.log(count);
}
return push;
}
위에서 push 를 호출하게 되면, 자유변수(count)에 상위 스코프(makeCounter) 에 기록된 값을 바인딩 하게 된다.
이처럼 자유변수에 값을 결정해서, 더 상위 스코프를 찾을 필요가 없어진 것을
Closure
- (열린함수를 닫았다) 라고 표현한다.
문제를 자기 반복적 문제로 분해하고 그것을 다시 조합하여 해를 구하는 방법을 재귀적 방법
이라고 한다. 재귀적인 사고방식이란 문제를 자기 반복적(유사도 가능) 문제의 합으로 바라보는 것이다.
function sum(...args) {
const argsArr = [...args];
if (argsArr.length === 0) {
return 0;
}
return argsArr[0] + sum(...argsArr.slice(1));
}
test('sum', () => {
expect(sum(1, 2)).toBe(3);
expect(sum(1, 2, 3)).toBe(6);
expect(sum(1, 2, 3, 4).toBe(10);
});
continuation-passing style 의 약자.
함수에 continuation 콜백을 추가적인 인자로 주어서
결과값을 계산한 후, continuation 에 결과값을 담아서 호출하는 형태로
프로그래밍 하는것.(<-> Direct style)
https://en.wikipedia.org/wiki/Continuation-passing_style
일급 객체란, 다른 객체들에 일반적으로 적용가능한 연산을 모두 적용할 수 있는 객체.
일반적으로 가능한 연산이란 보통, 함수에 매개변수로 대입하기, 변수에 대입하기, 수정하기
등을 말한다.
일급