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를 통해 기존함수의 인수를 고정하는 새로운 함수를 만들 수 있으며 인자의 고정된 부분집합을 갖고 사용할 수 있다.