JavaScript高級程序設計

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章