javascript中curried.concat.apply(curried,arguments)的解释

时间:2018-08-05 12:03:04

标签: javascript apply concat

在阅读“你不知道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对象作为对象进行级联,但是为什么我们需要级联,尽管当我尝试删除它时代码仍然可以正常工作并给出相同的结果。

0 个答案:

没有答案