函数的拓展

函数的变化

1.函数参数的默认值
es6之前,不能为函数的参数直接指定默认值,只能通过变通的方法。(typeOf x===undefinde)
es6 如url的使用解构赋值
es6 可以为函数的尾参数指定默认值
2.函数的length属性
指定了默认值以后,函数的length属性将返回没有指定函数默认值的参数个数。意思是,length属性失真,并不代表真正的参数个数。同理,rest参数也不会计入length属性。
因为length属性的定义:该函数预期传入的参数的个数
3.rest参数
es6引入了rest参数(行为“…变量名”),用于获取函数的多余参数,用于解放arguments对象,rest参数变量 是一个数组,用于接受多余的参数,一般位于函数的尾参数。
4.扩展运算符…
替代数组的apply方法
//es5的写法
function f(x,y,z){}
var args=[0,1,2]
f.apply(null,args)
//es6写法
function f(x,y,z){}
var args=[0,1,2]
f(…args)
合并数组
//es5
[1,2].concat(more)
//es6
[1,2,…more]
5.函数的返回值
js的函数返回值只能返回一个值,多个值,只能返回数组或者是对象,通过扩展运算,可以解决这个问题(将数组和对象 ,,,展开)
6.name属性
函数的name属性返回该函数的函数名
需要注意的是,es6对于这个属性的行为做一些修改,如果将一个匿名函数赋值给一个变量,es5的name属性会返回空字符串,而es6的name属性会返回实际的函数名。
Function构造函数返回的函数实例,name属性的值为anonymous
bind返回的函数,name属性值会加上 “bound”前缀
7.函数的绑定
es7提出函数绑定运算符,函数绑定运算符是并排的双冒号(:😃,双冒号左边是一个对象,右边是一个函数。该运算符会自动将左边的对象作为上下文(即this对象)绑定到有右边的函数上。
foo::bar
//等同于
bar.bind(foo)
foo::bar(…arguments)
//等同于
bar.apply(foo,arguments)
8.尾调用优化
尾调用时函数式编程的一个重要概念,本身简单,就是指某个函数的最后一步时调用另一个函数。
注意,只有不再用到外层函数的内部变量,内层函数的调用帧才会取代外层函数的调用帧,否在就不存在尾调用的优势。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值