ES6中函数的新增用法

参数设置默认值

在es6之前,我们想要给函数的参数添加默认值,只能通过变通的方式

function func(a,b){
            b = b || "tom";
            console.log(x,y);
        }
        
        func("hello");            //hello tom
        func("hello","world");    //hello world
        func("hello","");       //hello tom

ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面。如下代码:

function fun(a,b=10,c=20){
   return a+b+c;
}
console.log( fun(30) )  //60
console.log( fun(10,undefined,30) )  //50
console.log( fun(10,null,30) )  //40    注意:null在数学中,默认的为0,不要传递null

注意:只要给函数加上了参数默认值,该函数就自动变成严格模式。当参数传递了值,便不会再看默认值了
严格模式中,arguments和函数的形参不存在关系,没有对应的映射关系

注意:形参和let,const一样,有自己的作用域,根据声明的顺序,会产生临时性死区(参数声明前不能被调用),示例如下:

function test(a=b,b){  
   console.log(a,b)
}
test(undefined,2) //Cannot access 'b' before initialization

参数默认值的位置

function func(a,b=2,c){
            console.log(a,b,c);
        }
        func();                //undefined 2 undefined
        func(1);            //1 2 undefined
        func(1, ,3);        //Uncaught SyntaxError: Unexpected token
        func(1,undefined,3);//1 2 3
     func(1,null,3); //1 null 3

上面代码中,有默认值的参数都不是尾参数。这时,无法只省略该参数,而不省略它后面的参数,除非显式输入undefined。
  如果传入undefined,将触发该参数等于默认值,null则没有这个效果。

函数的length属性和作用域

length:
  指定了默认值以后,函数的length属性,将返回没有指定默认值的参数个数。也就是说,指定了默认值后,length属性将失真。

作用域:
  一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域(context)。等到初始化结束,这个作用域就会消失。这种语法行为,在不设置参数默认值时,是不会出现的。

ES6 的写法还有两个好处
1、增强可阅读性,阅读代码的人,可以立刻意识到哪些参数是可以省略的,不用查看函数体或文档;
2、有利于将来的代码优化,即使未来的版本在对外接口中,彻底拿掉这个参数,也不会导致以前的代码无法运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值