浅谈ES6 函数以及和ES5中函数区别。

ES6在函数上做出了一些改进,相比于ES5显得更加的灵活。

ES6允许给函数参数设置默认值

function ff(x, y = "word") {  // 设置默认值  不能再用let 和 const 继续声明
            console.log(x + y);
        }
        ff("hello ");   // hello word
        ff("hello ", "China"); //hello China

可以给形参设置默认值,因此传参的时候,可以不给y传参。当形参y没有接受到值的时候,就取默认值,如果有值的时候就取实参的值。
而在ES5中是不能给形参设置默认值的!
那这样做有什么好处呢?
① 有利于代码优化 ② 就算调用没有传参也不会出错

函数的length属性

返回没有指定默认值的参数个数,当碰到指定默认值后,length属性将失真 就算后面有其他参数也不会计算进去。

console.log((function(x , y=1, z){}).length); //输出1

也就是说只将参数x计算进去。

函数的参数作用域

一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域。等到初始化结束,这个作用域就会消失。这种语法行为,在不设置参数默认值时,是不会出现的。
在这里插入图片描述
因为x有实参传进来,所以x取实参的值,参数y的默认值是x,当x有值传进来的时候,也给y赋值了。
在这里插入图片描述
而上面x没有实参传进来,所以取全局变量的x,因此y输出等于1。

函数的默认的参数值

在这里插入图片描述
在这里插入图片描述
为什么两个输出不一样?因为第一个foo函数里面重新定义了x,所以此时与形参x,形参y匿名函数里面的x不是同一个作用域。
而第二个foo函数没有重新定义x,所以函数里面的x取的是形参的x,因此y执行完函数以后重新给x赋值。

变量作用域链:函数内部>实参>默认值>全局

函数的rest参数设置

引入rest参数(形式为 …变量) 用来获取多余参数 rest参数是一个真正的数组。而在ES5中需要用document类数组来获取。很明显ES6的更加方便。

function test (a,...rest){
            console.log(a); //盲僧
            console.log(rest); //["永恩","亚索","刀妹","vn"]
        }
        test("盲僧","永恩","亚索","刀妹","vn")

…会将剩下的参数放到一个数组里面,而这个数组也是Array类型,非常方便,但是参数rest后面不能再出现参数。

函数的严格模式

从ES5开始,函数内部可以设定为严格模式。而ES6中,如果参数设置了默认值、解构赋值、扩展运算符,就不能设定严格模式,否则会报错。
在这里插入图片描述
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值