为什么apply()这里只需要一个参数而不是两个?

时间:2011-10-31 01:53:30

标签: javascript

我正在阅读Javascript:The Good Parts这本书。我对以下代码感到困惑。

Function.method('curry', function (  ) {
    var slice = Array.prototype.slice,
        args = slice.apply(arguments),
        that = this;
    return function (  ) {
        return that.apply(null, args.concat(slice.apply(arguments)));
    };
});

null中的slice.apply(arguments)在哪里?

3 个答案:

答案 0 :(得分:5)

arguments作为上下文(this)传递,而不是函数的参数。

它等同于arguments.slice(),但arguments.slice()不存在。

答案 1 :(得分:2)

这相当于在没有参数的数组上调用slice() - 即它返回一个包含原始数组的所有元素的数组。在这种情况下,'arguments'不是一个真正的数组,所以在它上面调用Array.prototype.slice实际上会把它变成一个。

答案 2 :(得分:1)

正在调用两个不同的函数。 在第一种情况下

var slice = Array.prototype.slice,
args = slice.apply(arguments),

有关解释的详细信息,请参阅

http://blog.sebarmeli.com/2010/11/12/understanding-array-prototype-slice-applyarguments/

正在调用Array.prototype.slice,的apply方法,它将传递给函数的参数转换为数组。

在第二个函数中调用函数的apply方法。此功能的用法和详细信息在此处已明确定义 http://www.devguru.com/technologies/ecmascript/quickref/apply.html