보통의 함수는 다음과 같이 사용한다.
const greet = (greeting, name) => {
console.log(`${greeting} ${name}`);
}
greet('Hi', 'Tony');
greet('Hi', 'John');
greet('Hi', 'Tina');
함수를 연속해서 반환하는 커링(Currying)를 사용하면 다음과 같은 것이 가능해진다.
const curry = function(greeting) {
return function(name) {
console.log(`${greeting} ${name}`);
}
}
const curriedGreet = curry('Hi');
curriedGreet('Tony');
curriedGreet('John');
curriedGreet('Tina');
이는 렉시컬 환경과 클로저에 의해 가능하다.
- const curriedGreet = curry('Hi'); 을 통해서 변수가 ‘Hi’로 정의된 렉시컬 환경을 갖는 클로저가 생성된다.
- curredGreet(’…’); 은 기존에 생성된 curredGreet의 클로저를 통해 실행된다.
- greeting 변수와 name 변수가 사용되는데, greeting 변수는 curry(’Hi’) 에서 생성된 렉시컬 환경에서, name 변수는 curredGreet()을 호출하며 사용되는 파라미터로 사용된다.
위의 코드는 아래와 같이 간결하게 작성할 수 있다.
const curry = greeting => name => {
console.log(`${greeting} ${name}`);
};
'프론트엔드' 카테고리의 다른 글
복사 벤치마크 및 비교 : JSON.stringify vs Lodash vs Object.assign vs 직접 구현 (0) | 2023.08.04 |
---|---|
클로저, 렉시컬 환경 관점에서 본 useEffect 클린업 함수 (0) | 2023.08.01 |
intersection observer의 entries 진짜 마지막으로 이해하기 (0) | 2023.07.31 |
무한 스크롤 Intersection observer로 구현하기 (0) | 2023.07.30 |
intersection observer 이해하기 (0) | 2023.07.30 |