了解arguments的概念与用法

概念

是一种类数组对象(类似数组,但不是数组),只在函数的内部起作用,并且永远指向当前函数的调用者传入的参数

用法

1.使用arguments来得到函数的实际参数

 function argumentsFn(a,b,c,d){
    console.log(argumentsFn.length) //打印出形参 4 
    console.log(arguments.length) //打印出实参 2
    console.log(arguments[0]) //打印出第1个实参 '我是第一个实参'
    console.log(arguments[1])//打印出第2个实参 3
}
argumentsFn('我是第一个实参',3)

2.实现函数重载:当函数的参数个数不明确时,函数体根据参数的不同进行相应的处理

3.实现递归:在函数内部反复的调用函数本身

//需求:实现数字的叠加
function calc(num){
    if(num <= 0){
        return 0;
    }else{
        // return num += calc(num-1);//方式一(原始方法)
        return num += arguments.callee(num-1)//方式二
    }
}
var result = calc;
calc = null;
console.log(result(3));//6

arguments.callee :返回当前函数本身。⚠️arguments.callee的用法在严格模式下是不允许的
以上两种方式的区别:当外界定义了calc=null后,方式一会报错,因为此时calc已不是函数。但是写成 return num += arguments.callee(num - 1) 不会报错;因为arguments.callee指的是“当前函数”,并不是“calc”

类数组对象arguments和数组的区别

典型的类数组对象:{0:12, 1:23}
相同点:
- 都可以用下标访问每个元素
- 都有length属性
不同点:
- 数组对象的类型是Array,类数组对象的类型是Object;
- 类数组对象不能直接调用数组的API;
- 数组遍历可以用for in和for循环,类数组只能用for循环遍历;

类数组对象转为数组对象方法:

//方式一:
function func1() {
     console.log(Array.prototype.slice.call(arguments)); // [1, 2, 3]
}
func1(1, 2, 3);
方式二:使用ES6的...运算符 
function func(...arguments) {
    console.log(arguments); // [1, 2, 3]
}
func(1, 2, 3);

若有不足 欢迎留言讨论

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。