JavaScript·
1. implement curry()
- #BFE.dev
- #JavaScript
- #Snippets
문제
함수 fn을 입력으로 받아, 커링된 함수를 return하는 curry() 함수를 구현해주세요.
선행 지식
Function.prototype.call(thisArg, ...args)
- 함수를 즉시 호출한다.
- 첫 인자: 함수 내부의 this로 사용할 값
- 나머지 인자: 함수 인자로 그대로 전달
1fn.call(obj, a, b) // fn을 즉시 실행, this=obj
Function.prototype.apply(thisArg, argsArray)
- call과 동일하게 즉시 호출한다.
- 차이: 인자를 배열(또는 유사 배열)로 한 번에 넘긴다.
1fn.apply(obj, [a, b])
Function.prototype.bind(thisArg, ...args)
- 함수를 즉시 실행하지 않고, “새 함수(바인딩된 함수)”를 반환한다.
- 반환된 함수는:
- this가 고정되고(기본적으로 바인딩된 thisArg)
- 앞쪽 인자 일부가 미리 고정됨(partial application)
1const g = fn.bind(obj, a) // 실행 X2g(b) // 여기서 실행, fn(obj, a, b)
function.length
- 함수 선언부의 매개변수 개수(arity)를 나타냄.
1function f(a, b, c) {}2f.length // 3
- 주의: 기본값이 있으면 그 지점부터는 length가 줄어듦
1(a, b = 1, c) => {}.length // 1
함수의 this (일반 함수 vs 화살표 함수)
- 일반 함수: 호출 방식에 따라 this가 결정됨 (obj.m(), call/apply/bind 등)
- 화살표 함수: 자신만의 this가 없고, 정의 시점의 상위 스코프 this를 캡처