函数的rest参数和name属性

rest参数

ES6引入rest参数(形式为 ...变量名),用于获取函数的多余参数,这样就不需要使arguments对象了,rest参数搭配的变量是一个数组,该变量将多余的参数放入数组中。

两个
第一个是利用rest参数,来求和,第二个sortNumbers函数也是一样,用来排序

    function add(...values) {
        let sum = 0;
        for (const iterator of values) {
            sum += iterator;
        }
        return sum;
    }
    console.log(add(1, 2)); // 3
    console.log(add(1, 2, 3)); // 6

    const sortNumbers = (...numbers) => numbers.sort()

    console.log(sortNumbers(6, 4, 7, 1)); //[1, 4, 6, 7]

举个用rest参数改写数组push方法的例子

    function pushNumber(array, ...items) {
        items.forEach(function(item) {
            array.push(item);
        })
        return array
    }

    let a = [];
    console.log(pushNumber(a, 1, 2, 3)); //[1, 2, 3]

rest之后不可以再有其他参数,否则报错

    //报错,rest参数只能是最后面位置
    function f(a, ...b, c) {

    }

函数的length属性,不包括rest参数

    console.log(function(a) {}.length); // 1
    console.log(function(...a) {}.length); // 0
    console.log(function(c, d, ...a) {}.length); // 2

name属性

函数的name属性,返回该函数的函数名

    function foo() {}
    console.log(foo.name); // foo 

如果一个变量等于一个匿名函数。ES5和ES6的name属性返回不一样

    let f = function() {};
    //ES5
    console.log(f.name); // ""
    //ES6
    console.log(f.name); // f

Function构造函数返回的函数实例,name属性的值为anonymous

    console.log((new Function).name); // anonymous

bind返回的函数,name属性值会加上bound前缀

    function foo() {};
    console.log(foo.bind({}).name) // bound foo

    console.log((function() {}).bind({}).name) // bound

你可能感兴趣的:(函数的rest参数和name属性)