在阅读“你不知道JS”系列图书时,这个代码片段确实使我感到困惑。在第二章(软化绑定)中:
if (!Function.prototype.softBind) {
Function.prototype.softBind = function(obj) {
var fn = this,
curried = [].slice.call( arguments, 1 ),
bound = function bound() {
return fn.apply(
(!this ||
(typeof window !== "undefined" &&
this === window) ||
(typeof global !== "undefined" &&
this === global)
) ? obj : this,
curried.concat.apply( curried, arguments )
);
};
bound.prototype = Object.create( fn.prototype );
return bound;
};
}
除了为什么我们将 curried 串联在一起的原因外,我几乎可以理解所有内容,而 curried 应该是已经带有相同对象 arguments 的参数的数组的引用,以返回新的具有重复参数的对象:
curried.concat.apply( curried, arguments )
我理解为什么我们使用apply仅将参数作为参数传递而不是将arguments对象作为对象进行级联,但是为什么我们需要级联,尽管当我尝试删除它时代码仍然可以正常工作并给出相同的结果。