2015-05-23 3 views
-1

Я столкнулся с вопросом о применении при его использовании, например. Math.max. Например, скажем, у меня есть массив:Javascript применяет странное поведение?

var arr = [1, 2, 3, 4, 5]; 
var biggest = Math.max.apply(Math, arr); 
console.log(biggest);//outputs 5 which is correct 

Но любое значение, я прошел в качестве первого аргумента я всегда получаю тот же результат:

var biggest = Math.max.apply(this, arr); 
var biggest = Math.max.apply(null, arr); 
var biggest = Math.max.apply("", arr); 
var biggest = Math.max.apply(window, arr); 
... 

console.log(biggest);//all above output 5 why?? 

Единственное предположение, которое я могу сделать это, что Math.max когда вызывается throw apply, контекст функции не имеет значения в этой ситуации?

+0

Спасибо @DaveNewton, поэтому контекст функции не имеет значения на этот раз, как я думал. – user2019037

ответ

1

Первый параметр вы передаете apply какой-либо функции, будет в this внутри этой функции. Но max не зависит от текущего контекста. Итак, все будет работать на месте Math.

0

max был бы статическим методом на языке классов, таком как Java. Он не ретранслирует по контексту, он просто использует параметры. Вы можете видеть, что когда вы его вызываете, вы не создаете экземпляр Math, просто обращайтесь к его методам. Это функциональное программирование вызовов, так как нет состояния, которое могло бы повлиять на результат. Выходной сигнал функции всегда будет одинаковым, если входы одинаковы.

Смежные вопросы