2010-05-18 15 views
14

, bu işleri olarak vs. Math.max, nasıl kullanılır:yüksek dereceden fonksiyonlar Kısacası

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

Ama bu değil:

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

Saf şaşkınlık.

Bu, Firefox 3.5.9'da olduğunu ve mozilla standard implementation of reduce, FWIW kullanıyor olduğunu farz ediyorum. Daha yüksek mertebeden bir işlev olarak kullanılabilir.

+0

Terminoloji nitpick: Bir yüksek dereceden fonksiyonu olarak Math.max kullanmaya çalışmıyoruz, ancak daha yüksek dereceden işlevine argüman olarak kullanmak için. Daha yüksek bir sıra işlevi olarak kullanmak, onu işlevler olan argümanlarla kullanmak (veya bir işlevi döndürecek şekilde kullanmak) anlamına gelir. – sepp2k

+0

@ sepp2k Mükemmel bir şekilde nitpick. :-) – cemerick

+0

Spesifikasyonu azaltın burada https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/Reduce –

cevap

19

Math.max. Sorun .reduce 4 argümanlarla işlevini çağırır geçerli:

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

burada the_array bir dizidir, yani Math.max NaN döndürür. Son 2 argümanı atmanın daha basit bir yolu olduğunu sanmıyorum.

+1

MDC belgelerini yeterince okumamış olduğum şey budur. Bir fn IMO azaltma fikri, ama hey, javascript! ;-) Teşekkürler. – cemerick

0
Math.max.apply(Math, [1, 2, 3]); 
//3 
İlgili konular