我正在阅读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)
在哪里?
答案 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