JavaScript函數的arguments對象、重載問題

來源:互聯網
上載者:User

標籤:

一、arguments對象概述:

    1、ECMAScript 函數不介意傳遞進來多少參數,也不會因為參數不統一而錯誤。

    2、函數體內可以通過 arguments 對象來接收傳遞進來的參數,並且儲存函數參數

function box() {     return arguments[0]+‘ | ‘+arguments[1]+‘ | ‘+arguments[5]; //得到每次參數的值,最後結果是1 | 2 | 6}alert(box(1,2,3,4,5,6)); //傳遞參數

 

 

 

 

二、arguments 的length 屬性:

    arguments 對象的下的length 屬性可以得到參數的數量。

function box() {   return arguments.length; //得到 6}alert(box(1,2,3,4,5,6));

    利用 length 這個屬性,來智能的判斷有多少參數,然後把參數進行合理的應用。比如,要實現一個加法運算,將所有傳進來的數字累加,而數位個數又不確定。

function box() {        var sum = 0;        if (arguments.length == 0){            return sum;  //如果沒有參數,退出        }else{            for(var i = 0;i < arguments.length; i++) {             //如果有,就累加                sum = sum + arguments[i];            }            return sum;                                         //返回累加結果        }    }alert(box(5,9,12));

 

 

 

三、arguments 的callee 的屬性

  是一個指標,指向擁有這個 arguments 對象的函數

    1、簡單的一個遞迴:

  function box(num) {        if (num <= 1) {            return 1;        } else {            return num * box(num-1); //一個簡單的的遞迴        }    }    alert(box(4));//4*3*2*1 = 24  結果是24

    2、遞迴演算法

      對於階乘函數一般要用到遞迴演算法,所以函數內部一定會調用自身

      如果函數名不改變是沒有問題的,但一旦改變函數名,內部的自身調用需要逐一修改

      為瞭解決這個問題,我們可以使用 arguments.callee 來代替。

  function box(num) {        if (num <= 1) {            return 1;        } else {            return num * arguments.callee(num-1);       //使用 callee 來執行自身,實現遞迴        }    }    alert(box(4));//結果也是24

 

 

 

 

 

四、函數的重載問題

    ECMAScript 中的函數,沒有像其他進階語言那種函數重載功能。(如果有相同名稱的函數,則以最後一個為主)

function box(num) {     return num + 100;}function box (num) {                     //會執行這個函數    return num + 200;}alert(box(50));                         //返回結果是250,即調用的是第二個函數
function box(num,a) {    return num + 100;}function box (num) {                     //會執行這個函數     return num + 200;}alert(box(50,3));                         //結果還250  說明還是執行第二個函數  

 

JavaScript函數的arguments對象、重載問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.