본문 바로가기

Language/JavaScript

[effective javascript] 커링함수에 bind를 사용하라.

아래의 글은 Effective JavaScript 책을 기반으로 GitHub에 정리한 내용을 발췌한 자료 입니다.



function
simpleUrl( protocal, domain, path ){ return protocal + '://' + domain + '/' + path; } //ES5 배열의 map메서드를 사용하여 urls를 만들어 보기 var paths = ['test', 'test/1', 'test/123', 'etc/test/123']; var siteDomain = 'www.testurl.com'; var urls = paths.map(function(path){ return simpleUrl('http', siteDomain, path ); }); // map의 각 반복에서 익명 함수가 동일한 프로토콜 문자열 'http'와 siteDomain를 가지고 있는 것을 볼수 있다. // simpleUrl의 처음 두 인자는 매 반복마다 고정되어 있고, 실제로 세 번째 인자 path만 url를 만들때 필요하다. // simpleUrl에 bind 메서드를 이용해 이런 함수를 자동 생성할수 있다. var urls = paths.map(simpleUrl.bind(null, 'http', siteDomain));

위의 소스 코드 paths.map(simpleUrl.bind(null, 'http', siteDomain));와 같이 함수를 그 인자의 부분집합으로 바인딩하는 기법은 논리학자 하스켈 커리(Haskel Curry)의 이름을 따서 커링(curring)이라고 한다.

기억 할 점

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