思路:
partial(sayIt, 'Hello', 'Ellie')('!!!');首先执行partial(sayIt, 'Hello', 'Ellie'),将参数传入,然后返回函数result与('!!!')组合成result('!!!')执行。于是,可以在result函数里调用fn,因为函数的参数固定为三个,因此可以用call方法去调用函数fn。
function partial(fn, str1, str2) {
var result=function(str3){
return fn.call(this,str1,str2,str3);
}
return result;
}
// apply(这里只是为了对照)
function partial(fn, str1, str2) {
function result(str3) {
return fn.apply(this, [str1, str2, str3]);
}
return result;
}
// bind同上, 多了一步, 把str3传入的过程写在另一个函数里面
function partial(fn, str1, str2) {
function result(str3) {
return fn.bind(this, str1, str2)(str3);
}
return result;
}