1. 程式人生 > >Js中apply和Math.max()函式的問題及區別

Js中apply和Math.max()函式的問題及區別

這篇文章主要介紹了js中apply和Math.max()函式的問題,本文給大家帶來兩種答案,每一種答案給大家介紹的非常詳細,在文章底部給大家提到了js中Math.max.apply和Math.max的區別,寫的十分的全面細緻,具有一定的參考價值,對此有需要的朋友可以參考學習下。如有不足之處,歡迎批評指正。

下面給大家介紹js中apply和Math.max()函式的問題,具體內容如下所示:

var arr=[1,3,6,3,7,9,2];
console.log(Math.max.apply(null,arr));

答案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, ...)
//歡迎加入前端全棧開發交流圈一起學習交流:864305860

在此處,使用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(作用域鏈,引數)這個方法,這個函式的“引數”,接收一個數組,並且是將陣列中的每個值,分開來,傳遞給調 補充: Javascript中Math.max.apply和Math.max的區別

Javascript中的Math.max方法可以求出給定引數中最大的數。

> Math.max('1','2','3.1','3.2')
< 3.2//歡迎加入前端全棧開發交流圈一起學習交流:864305860
> Math.min(1,0,-1)
< -1

但如果是陣列,就不能這樣呼叫了。 此時就用到了apply方法:

apply 方法 (Function) (JavaScript)
呼叫函式,並用指定物件替換函式的 this 值,同時用指定陣列替換函式的引數。
apply([thisObj[,argArray]])
thisObj
  可選。 要用作 this 物件的物件。
argArray

 可選。 要傳遞到函式的一組引數。 巧妙地使陣列也可以呼叫Math.max和Math.min。

> Math.max.apply(null, ['1','2','3.1','3.2'])
< 3.2
> Math.min.apply(null, [1,0,-1])
< -1//歡迎加入前端全棧開發交流圈一起學習交流:864305860

結語

感謝您的觀看,如有不足之處,歡迎批評指正。