3.7 arguments
關於函數參數:
function(num){
}//num 即爲命名參數
- 函數的命名參數只提供便利,非必須。任何參數都可以通過arguments對象來獲取
- arguments對象只是與數組類似,但並不是數組的實例
- arguments的值始終與對應命名參數的值保持一致,但是他們的內存空間是獨立的
函數重載:
爲一個函數編寫兩個定義,只要函數簽名不同即可,即函數重載。
在ECMAscript函數中,由於不存在函數簽名的定義,所以不存在函數重載。但是可以通過arguments對象來檢測傳入參數的類型或者數量,做出不同的反應,模仿函數重載。
arguments callee
callee是arguments的一個屬性,在哪一個函數中運行,它就代表哪一個函數。 一般用在匿名函數中,實現對自身的調用
//用於驗證參數
//arguments.length 實參的長度
//arguments.callee.length形參(定義時規定的需要的參數)長度
function calleeLengthDemo(arg1, arg2) {
if (arguments.length==arguments.callee.length) {
window.alert("驗證形參和實參長度正確!");
return;
} else {
alert("實參長度:" +arguments.length);
alert("形參長度: " +arguments.callee.length);
}
}
//實現10的階乘
(function(n){
if(n > 1) return n* arguments.callee(n-1);
return n;
})(10);
注意:在嚴格模式中,廢棄了該屬性,不推薦使用 MDN