arguments
1.描述
1、是类数组,存储的是实参列表
function f1(a, b, c, d){
console.log(arguments) //是实参列表
console.log(typeof arguments); // object
console.log(fn.length) //4
}
f1(1,2)
2、访问实参和检查实参个数
function f2() {
console.log(arguments[0]); //name
console.log(arguments.length); /2
}
f2('name', 'age');
3、callee属性
每个对象都有自己的属性,arguments
的callee
属性,返回被执行的Function
对象
function f3() {
console.log(arguments.callee === f3); //true
}
f3('name', 'age');
4、arguments的修改
在正常的模式下,arguments
对象是允许在运行时进行修改的。
function f4() {
arguments[0] = 'sex'
console.log(arguments[0]); //sex
}
f4('name', 'age');
5、转化成真实数组
arguments
是类数组对象,除了length
属性和索引元素之外没有任何Array
属性。例如,它没有pop
方法。但是它可以被转换为一个真正的Array
function f4() {
arguments[0] = 'sex'
console.log(arguments[0]); //sex
}
f4('name', 'age');
2.应用
1、借用arguments.length可以来查看实参和形参的个数是否一致
function fn (a, b, c) {
if (fn.length != arguments.length) {
console.log('形参和实参的个数不一致');
} else{
console.log('形参和实参的个数一致');
}
}
fn(1, 2);
2、借用arguments.callee来让匿名函数实现递归
let sum = function (n) {
if (n == 1) {
return 1;
} else {
return n + arguments.callee(n - 1); // 5 4 3 2 1
}
}
console.log(sum(6)); // 21
3、遍历参数求和或者求最大值
function max () {
var max = arguments[0];
for (item of arguments) {
if (item > max) {
max = item;
}
}
return max;
}
console.log(max(5, 3, 2, 9, 4)); // 9
3.总结
arguments
是一个类数组对象,用来存储实参,有length
和callee
等属性;可以用arguments[0]
这个形式访问实参;可以转换为真实数组。arguments
和函数相关联,其只有在函数执行时可用,不能显式创建。arguments
可以用来遍历参数;通过callee
实现递归;也可以模拟函数重载。