快速实现一个一般是:
Function.prototype.bind = function (context) {
var me = this;
var argsArray = Array.prototype.slice.call(arguments);
return function () {
return me.apply(context, argsArray.slice(1))
}
}
但是最近看了一篇文章,说这种会
预设参数功能丢失是什么意思?
Function.prototype.bind = Function.prototype.bind || function (context) {
var me = this;
var args = Array.prototype.slice.call(arguments, 1);
return function () {
var innerArgs = Array.prototype.slice.call(arguments);
var finalArgs = args.concat(innerArgs);
return me.apply(context, finalArgs);
}
}
为什么还要搞一个innerArgs,柯里化?
请大神举下具体场景讲解下。感谢
原生的bind是可以使一个函数具有预设初始参数,也就是实现
偏函数
而你模仿实现的第一个
bind
方法不具有这个功能,往bind返回的函数(sum2)传参并没有效果。第二个
bind
方法就实现了这种预设初始参数的功能。sum2函数传入参数4,参数会被收集,并跟一开始使用bind方法传入的参数2合并到一起,然后再传给sum函数. 实现了sum(2, 4)的效果.MDN
上有bind
关于偏函数的应用讲解,可以再去看看.有讲得不好的地方,请指出.