谈谈神秘的ES6——(三)ES6的函数
ES6函数的改变不算太大,都是一些其他语言早就有的功能,而Javascript一直比较欠缺的,比如函数参数默认值,任意参数的表示法,最大的变化应该是支持箭头函数(其他语言称之为LAMBDA表达式),一种对匿名函数的一种简写方式。
箭头函数()=>{}
箭头函数的本质是方法函数的一种简写,不需要function关键字来创建函数,它可以省略return关键字,当只有一个参数是,可以省略(),如果只有一个return,可以省略{}。具体来看看代码:
function square(n){
return n*n;
}
//等价于
let square = n => n*n;
默认参数
在ES5我们给函数定义参数默认值是怎么样?
function action(num) {
num = num || 200
//当传入num时,num为传入的值
//当没传入参数时,num即有了默认值200
return num
}
但当,num传入为0的时候就是false, 此时num = 200 与我们的实际要的效果明显不一样。
ES6为参数提供了默认值。在定义函数时便初始化了这个参数,以便在参数没有被传递进去时使用。
function action(num = 200) {
console.log(num)
}
action() //200
action(300) //300
不定参数(Rest Parameter)
在函数命名参数前添加...三个点表明这是一个不定参数。
这是一个类似C#的params object参数,放在最后一个形参,用来收集剩余的参数。
function pick(obj, ...keys) {
let result = Object.create(null)
for (let i = 0, len = keys.length; i < len; i++) {
result[keys[i]] = object[keys[i]]
}
return result
}
其实,它还可以用来展开数组,我们来看一下:
Math.max可接受任意数量的参数并返回最大的那个,但如果传入的是一个数组,则只能使用apply。
console.log(Math.max(11, 2, 3, 12, 43, 904, 3543, 43))
let values = [11, 2, 3, 12, 43, 904, 3543, 43]
console.log(Math.max.apply(Math, values))
使用展开运算符就变得特别简单了。
let values = [11, 2, 3, 12, 43, 904, 3543, 43]
console.log(Math.max(...values))
如果想跟着振丹继续学习,可以微信关注【振丹敲代码】(微信号:JandenCoding)
新博文微信同步推送,还附有讲解视频哦~
也可直接扫描下方二维码关注。
来源:oschina
链接:https://my.oschina.net/u/3881109/blog/1919117