js中的arguments
arguments是JavaScript裏的一個內置對象,是指向實參對象的引用,它很古怪,也經常被人所忽視,但實際上是很重要的。所有主要的js函數庫都利用了arguments對象,所以agruments對象對於javascript程序員來說是必需熟悉的。
JS本身並沒有重載函數的功能,但Arguments對象能夠模擬重載,JS中每個函數都會有一個Arguments對象實例arguments,arguments是收到的實參副本,在詞法分析中, 首先按形參形成AO的屬性,值為undefined,當實參傳來時, 再修改AO的相應屬性,可以用數組下標的方式"[]"引用arguments的元素,arguments.length為函數實參個數,arguments.callee引用函數自身;arguments不是一個數組,如果用typeof arguments,返回的是’object’。雖然我們可以用調用數據的方法來調用arguments。比如length,還有index方法。但是數組的push和pop對象是不適用的。
arguments的特性和使用方法
1.特性:arguments對象和Function是分不開的,因為arguments這個對象不能顯式創建,arguments對象隻有函數開始時才可用。
2.使用方法:雖然函數的arguments對象並不是一個數組,但其訪問單個參數的方式與訪問數組元素的方式相同,索引n實際上是arguments對象的0…n 屬性的其中一個參數;雖然arguments對象並不是一個數組,但是訪問單個參數的方式與訪問數組元素的方式相同;例如:arguments[0],arguments[1],。。。。。。。。arguments[n];在js中不需要明確指出參數名就能訪問它們,例如:
function test(){
var s;
for(int i=0;i<arguments.length;i++)
{s+=arguments[i]+",";}
return s;
}
test("name","age")
輸出結果:
name,age
我們知道每一個對象都有自己的屬性,arguments對象也不例外,首先arguments的訪問猶如Array對象一樣,用0到arguments.length-1來枚舉每一個元素;下麵我們來看看callee屬性,返回正被執行的Function對象,也就是所指定的Function對象的正文;callee屬性是arguments對象的一個成員,僅當相關函數正在執行時才可用。callee屬性的初始值就是正被執行的Function對象,這允許匿名的遞歸函數。
var sum=function(n){
if(1==n) {
return 1;
} else {
return n + arguments.callee(n-1);
}
}
alert(sum(6));
通俗講就是,arguments對象大多用來針對同個方法多處調用並且傳遞參數個數不一樣時進行使用。根據arguments的索引來判斷執行的方法。
arguments的用法和特性基本就是這麼多了;可能callee屬性用到的比較少,但是如果自己封裝或者寫一些js的時候,除了callee的東西基本都會用到。
最後更新:2017-04-11 15:00:27