在一個函數體內,標識符arguments具有特殊含義。它是調用對象的一個特殊屬性,用來引用Arguments對象。Arguments像數組,但並非是數組,將它看作偶然具有了一些帶編碼的屬性的對象更合適。當函數具有命名了的參數時,Arguments對象的數組元素是存放函數參數的局部變量的同義詞。arguments[]數組和命名了的參數不過是引用同一變量的不同方法。用參數名改變一個參數的值時同時會改變argument[]數組獲得的值,通過arguments[]數組改變參數的值時也會改變用參數名獲得的參數值。例如:
function test(x)
{
alert(x); //顯示參數的初始值
arguments[0] = null; //改變數組元素也會改變x
alert(x); //現在顯示"null"
}
除了數組元素,Arguments對象還定義了callee屬性,用來引用當前正在執行的函數。這對未命名的函數調用自身非常有用。下面是一個未命名的函數直接量,用來計算階層。
var calc = function(x) {
if(x<=1) return 1;
return x*arguments.callee(x-1);
}
alert(calc(3)); //顯示6