首頁  >  文章  >  web前端  >  javascript arguments使用範例_javascript技巧

javascript arguments使用範例_javascript技巧

WBOY
WBOY原創
2016-05-16 16:26:201030瀏覽

複製程式碼 程式碼如下:



 
複製程式碼 程式碼如下:

 

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

複製程式碼 程式碼如下:

 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"

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

複製程式碼 程式碼如下:

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

3、由JavaScript中函數的宣告與呼叫特性,可以看出JavaScript中函數是不能重載的。

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

第一:Javascript函數的宣告是沒有回傳值型這一說法的;

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

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

複製程式碼 程式碼如下:

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

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