js Arguments對象

js的內置對象Arguments是函數的實際函數,他保存函數的所有參數。Arguments是一個對象,typeof Arguments得到的是Object,但有length,index的屬性。強調的是Arguments不是數組Array。引用一個形式參數可以用參數名,也可以用arguments[]數組形式,其中arguments[0]表示第一個參數。

Arguments和Array的區別:

js不會主動爲你判斷函數傳遞的參數個數,多傳了,多餘的部分就沒有被使用,少傳了,那麼沒傳的參數值就是undefined。通過Arguments的length屬性可獲取Function參數個數。

把arguments對象轉換成一個真正的數組
雖然arguments對象不是一個真正的javascript數組,但是我們還是可以輕易的把它轉換成標準的數據 ,然後進行數組操作。

var args = Array.prototype.slice.call(arguments); 

改變arguments中的參數:

說明一下arguments與真正傳的形式參數是一致的:

比如,你給函數傳了一個叫param的參數,並且只有這一個參數,那麼param與arguments[0]都是對這個參數值的引用,改變其中一個值,即改變了二者所有的值。

function change(param)
{
//比如我傳的param爲simaopig,那麼alert就是simaopig,
//如果啥也沒傳就會alert undefined
alert(param);
//用arguments[0]改變了這個參數的值
arguments[0] = 'xiaoxiaozi';
//沒錯,這個值變成了xiaoxiaozi
alert(param);
}

arguments的callee屬性:


arguments的callee屬性是用來引用當前正在執行的函數,這對未命名的函數調用自身非常有好處。

現在用arguments的這個callee同樣可以簡單的實現


//用函數直接量,採用arguments.callee屬性實現遞歸函數
var result = function(x){
if(x<=1) return 1; 
return x*arguments.callee(x-1);
};
在最後提醒大家一點,既然這個arguments這麼厲害,那麼我們就不要爲變量命名爲arguments了,事實上arguments是javascript的保留字之一。嗯。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章