JavaScript·

1. implement curry()

  • #BFE.dev
  • #JavaScript
  • #Snippets

문제

함수 fn을 입력으로 받아, 커링된 함수를 return하는 curry() 함수를 구현해주세요.

선행 지식

Function.prototype.call(thisArg, ...args)

  • 함수를 즉시 호출한다.
  • 첫 인자: 함수 내부의 this로 사용할 값
  • 나머지 인자: 함수 인자로 그대로 전달
1
fn.call(obj, a, b) // fn을 즉시 실행, this=obj

Function.prototype.apply(thisArg, argsArray)

  • call과 동일하게 즉시 호출한다.
  • 차이: 인자를 배열(또는 유사 배열)로 한 번에 넘긴다.
1
fn.apply(obj, [a, b])

Function.prototype.bind(thisArg, ...args)

  • 함수를 즉시 실행하지 않고, “새 함수(바인딩된 함수)”를 반환한다.
  • 반환된 함수는:
    • this가 고정되고(기본적으로 바인딩된 thisArg)
    • 앞쪽 인자 일부가 미리 고정됨(partial application)
1
const g = fn.bind(obj, a) // 실행 X
2
g(b) // 여기서 실행, fn(obj, a, b)

function.length

  • 함수 선언부의 매개변수 개수(arity)를 나타냄.
1
function f(a, b, c) {}
2
f.length // 3
  • 주의: 기본값이 있으면 그 지점부터는 length가 줄어듦
1
(a, b = 1, c) => {}.length // 1

함수의 this (일반 함수 vs 화살표 함수)

  • 일반 함수: 호출 방식에 따라 this가 결정됨 (obj.m(), call/apply/bind 등)
  • 화살표 함수: 자신만의 this가 없고, 정의 시점의 상위 스코프 this를 캡처

풀이