2014年6月15日 星期日

javascript 使用 arguments 來建立可變參數的函式

首先我們來簡單看看 arguments 介紹 :

arguments 物件 (Javascript)

You cannot explicitly create an arguments object.The arguments object only becomes available when a function begins execution.The arguments object only becomes available when a function begins execution.The arguments object of the function is not an array, but the individual arguments are accessed the same way array elements are accessed.The index n is actually a reference to one of the On properties of the arguments object

歸納出 2 個重點

  • 無法明確建立這個 arguments 物件, 只有在函式執行時才可使用這個物件.
  • 它是一個物件 (Object) 但不是陣列 (Array), 但它確保有 length 屬性.


舉一個簡單範例, 使用迴圈可以很輕鬆的拿到傳入的引數.

範例連結

知道如何使用 arguments 物件去取得我們需要的引數就可以開始做變化了,
想像我們需要一個函式功能是把所有數字加總算出總和.

範例連結


寫了一個 function 定義了一個參數專門處理 Array,
但是這樣的函式卻不能處理一個參數以上的需求.
讓我們來使用 arguments 來改寫這個函式.

範例連結


改寫完後可以處理多個參數的情況了,
但是反而沒辦法處理只傳單一 Array 的情況.
要如何去保有這 2 個功能呢?
我們可以使用參數固定的版本去實作參數可變的版本.

範例連結

當然這也可以延伸使用 applycall 方法做到可變參數的效果.
請看下面的範例.

範例連結

不過含有 apply 的程式碼可能比較不容易閱讀,
也常會帶來效能上的成本.
所以建議提供可變參數函式時, 也請提拱參數固定的版本, 如此用戶才不需要使用 apply 方法.

沒有留言: