1.arguments是什么?
- arguments 是一個(gè)類數(shù)組對(duì)象
- arguments對(duì)象是函數(shù)內(nèi)部的本地變量拷呆,已經(jīng)不再是函數(shù)的屬性了。
2.arguments有什么用?
在函數(shù)內(nèi)部,使用特殊對(duì)象 arguments,無(wú)需明確指出參數(shù)名,就能訪問(wèn)這些參數(shù)躬贡。
舉例來(lái)說(shuō),我在addAll(){ }函數(shù)中眼坏,使用了arguments[0]拂玻,但是我沒(méi)有指定參數(shù),當(dāng)我要調(diào)用addAll(2)時(shí)宰译,給他傳了一個(gè)參數(shù)就可以在函數(shù)中獲取到arguments[0]=2檐蚜。-
還可以用 arguments 對(duì)象檢測(cè)函數(shù)的參數(shù)個(gè)數(shù),引用屬性 arguments.length 即可囤屹。
如果一個(gè)函數(shù)有三個(gè)參數(shù)熬甚,那么arguments.length = 3,你可以通過(guò)以下方式獲取參數(shù):- arguments[0]
- arguments[1]
- arguments[2]
代碼
function addAll(){
let sum = 0;
for(let i=0;i<arguments.length;i++){
sum +=arguments[i];
}
console.log(sum);
}
addAll(10,20);
3.如果我們?cè)诤瘮?shù)中自己定義了一個(gè)名為arguments的變量,會(huì)出現(xiàn)什么情況肋坚?
- 嘗試之后發(fā)現(xiàn)整個(gè)程序報(bào)錯(cuò)乡括,提示** Identifier 'arguments' has already been declared**肃廓,所以不要定義arguments變量。
4.callee屬性
callee
屬性是一個(gè)指針诲泌,指向擁有這個(gè)arguments
對(duì)象的函數(shù)
- 用callee實(shí)現(xiàn)階乘
function fac(num){
if( num <= 1 ){
return 1;
} else{
return num*arguments.callee(num-1);
}
}
- 解除函數(shù)名與函數(shù)體之間的耦合盲赊,對(duì)上面的函數(shù)fac,進(jìn)行下面的操作
let newFac = fac;
fac = function(){
return 0敷扫;
}
alert(newFac(5)); //120
alert(fac(5)); //0