js中apply和Math.max()函數的問題


var arr=[1,3,6,3,7,9,2];

console.log(Math.max.apply(null,arr));

一直搞不懂為什麼這樣可以算出一個數組的最大值?一直想不明白,請js高手指教一下。

答案1

Function.apply()是JS的一個OOP特性,一般用來模擬繼承和擴展this的用途,對於上面這段代碼,可以這樣去理解:

XXX.apply是一個調用函數的方法,其參數為:apply(Function, Args),

Function為要調用的方法,Args是參數列表,當Function為null時,默認為上文,

Math.max.apply(null, arr)

可認為是

apply(Math.max, arr)

然後,arr是一個參數列表,對於max方法,其參數是若幹個數,即

Math.max(a, b, c, d, …)

當使用apply時,把所有參數加入到一個數組中,即

arr = [a, b, c, d, …]

代入到原式,

Math.max.apply(null, [a, b, c, d, …])

實際上等同於

Math.max(a, b, c, d, …)

在此處,使用apply的優點是在部分JS引擎中提升性能。

答案2

Math.max()方法,支持傳遞多個參數,比如:Math.max(1,4,2,3,7,5,6)

但是它不支持直接傳遞一個數組作為參數,比如:Math.max(new Array(1,4,2,3,7,5,6))。

這裡,隻要我們有方法把數組,一個一個拆分開來,傳遞到Math.max()方法中,就實現瞭傳遞數組的方法。

所有函數都有apply(作用域鏈,參數)這個方法,這個函數的“參數”,接收一個數組,並且是將數組中的每個值,分開來,傳遞給調

發佈留言