js中arguments

arguments

天天一對象,JS每天見,今天咱們來看看arguments對象及屬性。arguments對象不能顯式建立,arguments對象只有函數開始時纔可用。函數的 arguments 對象並非一個數組,訪問單個參數的方式與訪問數組元素的方式相同。索引 n 其實是 arguments 對象的 0…n 屬性的其中一個參數。

  下面的示例演示了 arguments 對象的用法,arguments對象和Function是分不開的。
 1 function  ArgTest(a, b) {
 2   var i, s = "The ArgTest function expected ";
 3   var numargs = arguments.length;     // 獲取被傳遞參數的數值。
 4   var expargs = ArgTest.length;       // 獲取指望參數的數值。
 5   if (expargs < 2)
 6      s += expargs + " argument. ";
 7   else
 8      s += expargs + " arguments. ";
 9   if (numargs < 2)
10      s += numargs + " was passed.";
11   else
12      s += numargs + " were passed.";
13   s += "\n\n"
14   for (i =0 ; i < numargs; i++){      // 獲取參數內容。
15   s += "  Arg " + i + " = " + arguments[i] + "\n";
16   }

17   return(s);                          // 返回參數列表。
18}

  以上是arguments對象,因爲和Function對象緊密地聯繫在一塊兒。也就是說每個函數都有本身的argument屬性。下面咱們來看看argument屬性:爲當前執行的 function 對象返回一個arguments 對象,function 參數是當前執行函數的名稱,能夠省略。

   經過 arguments 屬性(相對於Function來講),函數能夠處理可變數量的參數。arguments 對象的 length 屬性包含了傳遞給函數的參數的數目。對於arguments 對象所包含的單個參數,其訪問方法與數組中所包含的參數的訪問方法相同。請看下面的例子:
 1 function  ArgTest() {
 2   var i, s, numargs = arguments.length;
 3   s = numargs;  
 4   if (numargs < 2)
 5      s += " argument was passed to ArgTest. It was ";
 6   else
 7      s += " arguments were passed to ArgTest. They were " ;
 8   for (i = 0; i < numargs; i++)
 9      {
10         s += arguments[i] + " ";
11      }

12   return(s);
13}

   咱們知道每個對象都有本身的屬性,arguments對象也不例外,首先arguments的訪問猶如Array對象同樣,用0到arguments.length-1來枚舉每個元素。下面咱們來看看callee屬性,返回正被執行的 Function 對象,也就是所指定的 Function 對象的正文。callee 屬性是 arguments 對象的一個成員,僅當相關函數正在執行時纔可用。callee 屬性的初始值就是正被執行的 Function 對象,這容許匿名的遞歸函數
1 function  factorial(n) {
2  if (n <= 0)
3  return 1;
4  else
5    return n * arguments.callee(n - 1)
6}

7 print(factorial( 3 ));
8

相關文章
相關標籤/搜索