ES6函数传参——默认参数和剩余参数

一、默认参数

1、只有在未传递参数,或者参数为 undefined 时,才会使用默认参数,null 值被认为是有效的值传递。

即使显式的传入undefined(虽然不是null或其他falsy值),但是形参的值还是默认值。

2、调用时解析

在函数被调用时,参数默认值会被解析,比如:

function append(value, array = []) {
  array.push(value);
  return array;
}

append(1); //[1]
append(2); //[2], not [1, 2]

默认值也可以是已经被定义的函数或变量,需要注意,调用时才会解析默认值,所以要注意申明的函数和变量的位置。

        function foo(funcResult = bar()) {
            console.log(funcResult)
        }

        let num = 0;

        function bar() {
            num += 1;
            return num;
        }

        foo(); // 1
        foo(); // 2

默认参数的默认值可以是变量,也可以是该函数前面的形参

        function foo(a,b=a,c = a +b){
            console.log(a,b,c)
        }
        foo(1); // 1 1 2

通过解构赋值为默认参数赋值

function f([x, y] = [1, 2], {z: z} = {z: 3}) { 
  return x + y + z; 
}

f(); // 6

二、剩余参数

剩余参数语法允许我们将一个不定数量的参数表示为一个数组。

剩余参数和 arguments对象之间的区别主要有三个:

  • 剩余参数只包含那些没有对应形参的实参,而 arguments 对象包含了传给函数的所有实参。
  • arguments对象不是一个真正的数组,而剩余参数是真正的 Array实例,也就是说你能够在它上面直接使用所有的数组方法,比如 sortmapforEachpop
  • arguments对象还有一些附加的属性 (如callee属性)。
function sum(a,b, ...c){
  console.log(c);
}
sum(1,2,3,4,5);

 

三、非严格模式、严格模式、ES6剩余参数下的arguments对比

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值