• 《理解 ES6》阅读整理:函数(Functions)(二)Unnamed Parameters


    使用未命名参数(Working with Unnamed Parameters)

    JavaScript并不限制传递给函数的实参个数,你可以总是传递比形参个数多或者少的实参。在ES6中当向函数传递比形参个数少的实参时,就会使用默认参数值。当向函数传递比形参个数多的实参时,ES6同样有对应的方案使用。来看一个示例:

    function pick(object) {
        let result = Object.create(null);
        for (let i = 1, len = arguments.length; i < len; i++) {
            result[arguments[i]] = object[arguments[i]];
        }
        return result;
    }
    
    let book = {
        title: "JavaScript Guide",
        author: "Zakas",
        year: 2016
    };
    
    let bookData = pick(book, "author", "year");
    
    console.log(bookData.author);  //Zakas
    console.log(bookData.year);  //2016

    上面这段代码将object的某些属性拷贝出来并返回。我们利用arguments对象来访问多传递的实参。在ES6中你可以用剩余参数来直接访问多传递的参数。

    剩余参数(Rest Parameters)

    剩余参数以...标记,当你向函数传递多余的实参时,剩余参数会变成一个数组并且包含所有剩余的实参。上面的例子可以用剩余参数重写:

    function pick(object, ...keys) {
        let result = Object.create(null);
        for (let i = 0, len = keys.length; i < len; i++) {
            result[keys[i]] = object[keys[i]];
        }
        return result;
    }

     在上面的代码中,keys是一个剩余参数并且包含所有在object之后传入的实参。这里可以看到arugments与keys的不同,arugments包含所有的参数。

    剩余参数的使用限制(Rest Parameter Restrictions)

    剩余参数有两个使用限制。第一个限制是:一个函数中只能有一个剩余参数并且只能放在最后。下面的代码会报错:

    function pick(object, ...keys, last) {
        let result = Object.create(null);
        for (let i = 0, len = keys.length; i < len; i++) {
            result[keys[i]] = object[keys[i]];
        }
        return result;
    }

    第二个限制是:剩余参数不能使用在对象的setter中。下面的代码会报错:

    let object = {
        set name(...value) {
            //...
        }
    }

    剩余参数对arguments对象的影响(How Rest Parameters Affect the argument Object)

    在ES6中,剩余参数对arguments对象的使用实际上没有任何影响,arugments对象包含所有传入函数的参数,而剩余参数包含所有传入函数的多余的参数:

    function checkArgs(...args) {
        console.log(args.length);
        console.log(arguments.length);
        console.log(args[0], arguments[0]);
        console.log(args[1], arguments[1]);
    }
    
    ckeckArgs("a,", "b");
    
    //  输出
    //  2
    //  2
    //  a  a
    //  b  b
  • 相关阅读:
    Opencv在mac系统的安装与试用
    VINS 估计器之检查视差
    C语言——第零次作业
    C语言博客05指针
    循环结构
    C语言博客作业数组
    函数3
    C博客作业01分支、顺序结构
    group by的查询
    layui多张图片上传最多9张(新增和修改时的显示问题)
  • 原文地址:https://www.cnblogs.com/xfshen/p/5979919.html
Copyright © 2020-2023  润新知