Как использовать Math.max и т.д. Как функции более высокого порядка

Короче говоря, это работает:

[1, 2, 3].reduce(function (a, b) { return Math.max(a, b); });
=> 3

Но это не так:

[1, 2, 3].reduce(Math.max);
=> NaN

Чистое недоумение.

Это в Firefox 3.5.9, который, как я полагаю, использует стандартная реализация mozilla сокращения, FWIW.

Ответ 1

Math.max может использоваться как функция более высокого порядка. Задача .reduce вызовет функцию с 4 аргументами:

Math.max(accumulator, value, index, the_array)

здесь the_array - массив, поэтому Math.max возвращает NaN. Я не думаю, что есть простой способ отбросить последние 2 аргумента.

Ответ 2

Math.max.apply(Math, [1, 2, 3]);
//3