js 中函數(shù)的內(nèi)置對(duì)象 arguments 及使用
函數(shù)的內(nèi)置對(duì)象 arguments
arguments 是函數(shù)調(diào)用時(shí)候的參數(shù)集合断凶,它本身是個(gè)偽數(shù)組蚓曼,可以通過(guò)擴(kuò)展運(yùn)算符轉(zhuǎn)化為真實(shí)數(shù)組。箭頭函數(shù)沒(méi)有 arguments 對(duì)象
arguments 里面包含兩個(gè)屬性:length 和 callee
length:傳入實(shí)參個(gè)數(shù)
callee:代表函數(shù)本身
arguments 使用
- 采用 arguments 使用不定數(shù)字相加
// 采用arguments使用不定數(shù)字相加
function fn(){
var sum = 0
const arg = [ ...arguments ]
arg.forEach(function(v){
sum += v
})
return sum
}
console.log(fn(2,3,4,5)) // 14
console.log(fn(1,2,3)) // 6
console.log(fn(2,3)) // 5
- 使用 arguments 的 callee 屬性解決遞歸的問(wèn)題
// arguments的callee屬性解決遞歸的問(wèn)題
function sum(num) {
return num === 1 ? 1 : num + sum(num - 1);
}
console.log(sum(10)); // 55
var fn = sum
sum = null
console.log(fn) // ? sum(num) { return num === 1 ? 1 : num + sum(num - 1);}
console.log(fn(10)) // Error: sum is not a function
因?yàn)樵诳截惡瘮?shù)時(shí)是拷貝整個(gè)函數(shù)而并非復(fù)制函數(shù)的引用扎运,所以 sum 變?yōu)?null 后 fn 還是原函數(shù),但是函數(shù)內(nèi)部的遞歸函數(shù) sum 已經(jīng)變?yōu)?null拢军,所以報(bào)錯(cuò) sum is not a function
解決方法:
function sum(num) {
return num === 1 ? 1 : num + arguments.callee(num - 1);
}
console.log(sum(10)); // 55
var fn = sum
sum = null
console.log(fn) // ? sum(num) { return num === 1 ? 1 : num + sum(num - 1);}
console.log(fn(10)) // 55