JavaScript 函數參數-Arguments(實參)對象

1、參數概念

函數運行的時候,有時須要提供外部數據,不一樣的外部數據會獲得不一樣的結果,這種外部數據就叫參數。

1.1 示例

參數的概念

上式的 x 就是square函數的 參數。每次運行的時候,須要提供這個值,不然得不到結果。javascript

2、形式參數和實際參數

2.1 形式參數在函數定義時列出。

2.2 實際參數在函數調用時傳遞給函數真正的

形式參數和實際參數

形式參數和實際參數是不一樣的變量,他們在內存中處於不一樣的位置,形式參數在函數運行結束時將被釋放。html

3、參數規則

3.1 函數定義時形式參數沒有指定數據類型。

3.2 函數對實際參數沒有進行類型檢測。

3.3 函數對實際參數的個數沒有進行檢測。

參數的規則

4、默認參數

若是函數在調用時未提供實際參數,參數會默認設置爲: undefinedjava

默認參數

若是y已經定義 , y || 返回 y, 由於 y 是 true, 不然返回 0, 由於 undefined 爲 false。web

5、參數個數

5.1 實參比形參少

(1)當調用函數時傳遞的實參比函數定義時的形參個數少,剩下的形參都將設置爲 undefined 值。segmentfault

實參比形參少

(2)一般函數只保留靠前的參數,而省略靠後的參數。若是必定要省略靠前的參數,只有顯式傳入 undefined數組

顯式傳入

5.2 實參比形參多

(1)若是函數調用時設置了過多的實際參數,剩下的實際參數沒有方法直接獲取,須要使用即將提到的arguments對象。函數

6、Arguments(實參)對象

6.1 定義

(1)因爲 JavaScript 容許函數有不定數目的參數,因此須要一種機制,能夠在函數體內部讀取全部參數。這就是arguments對象的由來。spa

(2)arguments對象包含了函數運行時的全部參數,arguments[0]就是第一個參數,arguments[1]就是第二個參數,以此類推。這個對象只有在函數體內部,纔可使用。3d

6.2 示例

(1)指針

Arguments對象

(2)

Arguments對象

5.3 length屬性

(1)經過arguments對象的length屬性,能夠判斷函數調用時傳遞的實際參數個數

length屬性

(2)注意

length屬性

arguments對象的length屬性顯示實參的個數,函數的length屬性顯示形參的個數

(3)形參只是提供便利,但不是必需的

形參

5.4 和數組的關係

(1)須要注意的是,雖然arguments很像數組,但它是一個對象。數組專有的方法(好比slice和forEach),不能在arguments對象上直接使用。

(2)若是要讓arguments對象使用數組方法,真正的解決方法是將arguments轉爲真正的數組

(3)下面是兩種經常使用的轉換方法:slice方法逐一填入新數組

轉爲數組

5.5 callee 屬性

(1)arguments對象有一個名爲callee的屬性,該屬性是一個指針,指向擁有這個arguments對象的函數

(2)下面是經典的階乘函數

階乘函數

(3) 可是,上面這個函數的執行與函數名牢牢耦合在了一塊兒,可使用arguments.callee能夠消除函數解耦

解耦

(4) 但在嚴格模式下,訪問這個屬性會拋出TypeError錯誤

嚴格模式

(5)這時,可使用具名的函數表達式

具名的函數表達式

閱讀更多

參考文章

函數

深刻理解javascript函數系列第二篇——函數參數

相關文章
相關標籤/搜索