javascript arguments與javascript函數重載

來源:互聯網
上載者:User

1.所 有的函數都有屬於自己的一個arguments對象,它包括了函所要調用的參數。他不是一個數組,如果用typeof arguments,返回的是’object’。雖然我們可以用調用資料的方法來調用arguments。比如length,還有index方法。但是數 組的push和pop對象是不適用的。

2.函數定義時的參數個數和函數調用時的參數個數沒有任何關係。 在函數中可以用f.arguments[0]和f.arguments[1]得到調用時傳入的第一和第二個參數,arguments不能夠建立,是函數自身的參數,只有當函數開始執行是才能使用。
雖然arguments的使用方法,很像數組,但是它並不是數組。arguments對象的長度是由實參個數而不是形參個數決定的。形參是函數內部重新開闢記憶體空間儲存的變數,但是其與arguments對象記憶體空間並不重疊。
 

 function argumentsTest (a,b) {
     // alert(typeof arguments);
     alert(arguments.length);
     alert(arguments[1]);
 }
 argumentsTest(1,2,3,4);

輸出的結果為4,2;

 function argumentsTest (a,b) {
     alert(arguments.callee);
     alert(arguments.callee.length);
 }
 argumentsTest(1,2,3,4);

輸出的結果為argumentsTest,2;

3.由JavaScript中函數的聲明和調用特性,可以看出JavaScript中函數是不能重載的。

根據其他語言中重載的依據:"函數傳回值不同或形參個數不同",我們可以得出上述結論:

第一:Javascript函數的聲明是沒有傳回值類型這一說法的;

第二:JavaScript中形參的個數嚴格意義上來講只是為了方便在函數中的變數操作,實際上實參已經儲存在arguments對象中了。

另外,從JavaScript函數本身深入理解為什麼JavaScript中函數是不能重載的:在JavaScript中,函數其實也是對象,函數名是關於函數的引用,或者說函數名本身就是變數。

如何?javascript的重載呢?

使用arguments判定參數的個數使用不同的方法實現函數重載:

<script language="JavaScript">function f(length){    var len= arguments.length;    if(1 == len)    {        var width = arguments[1];        alert("高為:"+length+",寬為:"+width);    }    else    {        alert("高為:"+length);    }}</srcipt>

4.arguments對象中有一個非常有用的屬性:callee。arguments.callee返回此arguments對象所在的當前函數引用。在使用函數遞迴調用時推薦使用arguments.callee代替函數名本身。

function count(a){    if(a==1){        return 1;    }     return a + arguments.callee(--a);}var mm = count(10);alert(mm);


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.