[Effective JavaScript] 커링 함수에 bind를 사용하자

김범식·2023년 7월 6일
0

Effective JavaScript

목록 보기
1/33
post-thumbnail

커링 함수에 bind를 사용하자


simpleURL()

function simpleURL(protocol, domain, path){
	return protocal+"://"+domain+"/" +path;
}



위의 매서드는 다음과 같이 사용할 수 있습니다.

var urls = paths.map(function(path){
	return simpleURL("http",siteDomain, path);
})



map의 각 반복에서 익명함수가 동일한 프로토콜 문자열 http와 사이트 도메인 문자열 siteDomain 즉 처음 두인자는 매번 반복됩니다. 때문에 bind를 사용해 다음과 같이 정의할 수 있습니다.


var urls = paths.map(simpleURL.bind(null, "htto",siteDomain))

simpleURL.bind를 호출하면 simpleURL에 위임하는 새로운 함수를 만들 수 있습니다. 첫번째 인자는 수신자 객체 값을 바인딩 하기 위해 전달합니다. (simpleURL은 this를 참조하지 않기 때문에 어떤 값을 사용해도 상관없습니다. ) 관습적으로 null이나 undefined를 사용합니다.

이처럼 커링은 명시적인 래퍼 함수보다 상용구가 덜 필요하기 때문에 함수 위임을 구현하기 위한 좋은 방법입니다.


다음은 더 간단한 예제를 보자

function func(a,b,c){
  return a+b+c;
}

let newFunc = func.bind(null, 1,2);
console.log(newFunc(3));  // 출력 : 6

bind를 통해 기존함수의 인수를 고정하는 새로운 함수를 만들 수 있으며 인자의 고정된 부분집합을 갖고 사용할 수 있다.



기억할 점

  • 함수를 커링하기 위해 bind를 사용하라. bind를 사용하면 필요한 인자의 고정된 부분집합을 가지는 위임함수를 만들 수 있다.
  • 수신자 객체를 무시하는 함수를 커링할 때에는 수신자 객체인자로 null, undefined를 전달하자
profile
frontend developer

0개의 댓글