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);