首頁  >  文章  >  web前端  >  JavaScript arguments對象

JavaScript arguments對象

巴扎黑
巴扎黑原創
2016-12-06 10:17:471013瀏覽

一.在JavaScript中,arguments對像是比較特別的一個對象,實際上是當前函數的一個內建屬性。 arguments非常類似Array,但其實又不是一個Array實例。可以透過以下程式碼得以證實(當然,實際上,在函數funcArg中,呼叫arguments是不必要寫成funcArg.arguments,直接寫arguments即可)。

Js代碼  

Array.prototype.testArg = "test";  
function funcArg() {  
    alert(funcArg.arguments.testArg);    
    alert(funcArg.arguments[0]);  
}  
  
alert(new Array().testArg); // result: "test"  
funcArg(10);                // result: "undefined"  "10"

 

二.arguments物件的長度是由實參個數而不是形參個數決定的。形參是函數內部重新開啟記憶體空間儲存的變量,但是其與arguments物件記憶體空間並不重疊。對於arguments和值都存在的情況下,兩者值是同步的,但是針對其中一個無值的情況下,對於此無值的情形值不會得以同步。如下程式碼可以得以驗證。

Js程式碼  

function f(a, b, c){  
    alert(arguments.length);   // result: "2"  
    a = 100;  
    alert(arguments[0]);       // result: "100"  
    arguments[0] = "qqyumidi";  
    alert(a);                  // result: "qqyumidi"  
    alert(c);                  // result: "undefined"  
    c = 2012;  
    alert(arguments[2]);       // result: "undefined"  
}  
  
f(1, 2);

 

三.由JavaScript中函數的宣告和呼叫特性,可以看出JavaScript中函數是不能重載的。

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

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

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

        另外,從JavaScript函數本身深入理解為什麼JavaScript中函數是不能重載的:在JavaScript中,函數其實也是對象,函數名稱是關於函數的引用,或者說函數名本身就是變數。對於如下所示的函數宣告與函數表達式,其實含以上是一樣的(在不考慮函數宣告與函數表達式區別的前提下),非常有利於我們理解JavaScript中函數是不能重載的這一特性。

Js代碼  

function f(a){  
    return a + 10;  
}  
  
function f(a){  
    return a - 10;  
}  
  
// 在不考虑函数声明与函数表达式区别的前提下,其等价于如下  
  
var f = function(a){  
    return a + 10;  
}  
  
var f = function(a){  
    return a - 10;  
}

 

四.arguments物件中有一個非常有用的屬性:callee。 arguments.callee傳回此arguments物件所在的目前函數參考。在使用函數遞歸呼叫時建議使用arguments.callee代替函數名本身。

        如下:

Js代碼  

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

 


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn