js 中函数的内置对象 arguments 及使用
函数的内置对象 arguments
arguments 是函数调用时候的参数集合,它本身是个伪数组,可以通过扩展运算符转化为真实数组。箭头函数没有 arguments 对象
arguments 里面包含两个属性:length 和 callee
length:传入实参个数
callee:代表函数本身
arguments 使用
- 采用 arguments 使用不定数字相加
// 采用arguments使用不定数字相加
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 属性解决递归的问题
// arguments的callee属性解决递归的问题
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
因为在拷贝函数时是拷贝整个函数而并非复制函数的引用,所以 sum 变为 null 后 fn 还是原函数,但是函数内部的递归函数 sum 已经变为 null,所以报错 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