为什么要将Math作为第一个参数传递给Math.max.apply?

时间:2014-03-12 21:47:23

标签: javascript

我正在阅读John Resig的JavaScript忍者教程和#51我看到了这一点:

// Find the largest number in that array of arguments 
var largestAllButFirst = Math.max.apply( Math, allButFirst ); 

allButFirst只是一小组整数。我相信我理解apply的作用,但我无法理解为什么Math被作为apply的参数传递。

3 个答案:

答案 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,则默认为全局对象。因此,如果可能的话,最好给出一些背景信息。