JS Arguments详解

Arguments详解

Arguments特性

  • arguments对象和Function是分不开的。
    • 因为arguments这个对象不能显式创建,arguments对象只有函数开始时才可用。
  • 虽然arguments对象并不是一个数组,但是访问单个参数的方式与访问数组元素的方式相同。
  • 在js中不需要明确指出参数名,就能访问它们。

Arguments相关属性

  • 利用arguments.callee实现递归
    • callee是指向自身函数fun
    function fun(num) { 
        if(num<=1) { 
            return 1; 
        }else { 
            return num * arguments.callee(num-1);
        } 
    } 
    console.log(fun(5));
  • 利用arguments.length实现方法的重载
    • arguments不是数组,而是一个类数组对象
    • 重载的定义是指函数的方法名相同,但参数不同。
    function add() {
        var len = arguments.length,
            sum = 0;
        for(;len--;){
            sum += arguments[len];
        }
        return sum;
    }
    console.log(add(1,3,5));
  • 利用arguments[Symbol.iterator]的迭代器枚举的值
    • Symbol类型的值都是独一无二的,该键指向的值是一个values函数
    // 该值是一个生成迭代器的函数,下面是ES6入门的部分文档
    let arr = ['a', 'b', 'c'];
    let iter = arr[Symbol.iterator]();
    console.log(iter.next());           // { value: 'a', done: false }
    console.log(iter.next());           // { value: 'b', done: false }
    console.log(iter.next());           // { value: 'c', done: false }
    console.log(iter.next());           // { value: undefined, done: true }
    function fun(){
        console.log(arguments[Symbol.iterator]);
        let iterator = arguments[Symbol.iterator]();
        console.log('iterator:',iterator);
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());
    }
    fun('tom',[1,2,3],{name:'Janny'});

ES6中替代arguments的rest参数

  • 使用背景:es6的
  • 优点:arguments是伪数组,而rest参数是真数组
    function fn(...args){
        console.log(args);  //数组:[1,2,3,4,5]
    }
    fn(1,2,3,4,5)
原文地址:https://www.cnblogs.com/SharkJiao/p/13428507.html