我正在阅读John Resig的JavaScript忍者教程和#51我看到了这一点:
// Find the largest number in that array of arguments
var largestAllButFirst = Math.max.apply( Math, allButFirst );
allButFirst
只是一小组整数。我相信我理解apply
的作用,但我无法理解为什么Math
被作为apply
的参数传递。
答案 0 :(得分:3)
.apply
的第一个参数是上下文。在函数体内,this
关键字将引用该值。
示例:
function sum(a){ return this + a; }
sum.apply(1, [1]); // will return 2
// or with .call
sum.call(1, 1); // also returns 2
默认情况下,如果您拨打Math.max
,则上下文(this
关键字)会自动设置为Math
。为了保持此行为Math
作为apply中的第一个参数传递。
答案 1 :(得分:1)
传递Math
没有必要,任何事都可以在这里工作。 Math
表示操作的上下文,但max
不需要上下文。这意味着Math.max.apply(undefined, allButFirst)
也可以。请参阅this回答。
答案 2 :(得分:0)
来自Mozilla docs:
fun.apply(thisArg,[argsArray])
thisArg:为fun的调用提供的值。请注意这一点 可能不是方法看到的实际值:如果方法是a 在非严格模式代码中的函数,null和undefined将被替换 使用全局对象,原始值将被加框。
因此,在您的示例中,Math
被用作函数的上下文(如果在内部使用关键字this
)。
如果未使用thisArg
,则默认为全局对象。因此,如果可能的话,最好给出一些背景信息。