前言
函数对我们来说使用是非常频繁的,ES6中对于函数又加入了很多非常好用的内容,最近看完这一块之后,觉得很有必要整理一下。
Es6中的参数默认值
经常使用javascript的人都知道在ES5中如果我们想要对所传参数设置默认值,我们需要在函数体内一开始的地方编写,比如:
function fnc( a, b ){
// 给b设置默认参数
b = b || 10;
return a+b;
}
// 传入 a 与 b
fnc(2,3) // 返回 5
// b不传值
fnc(5) // 返回 15
// 但是这里有一种情况,当我给b传入0时
fnc(5,0) //返回 15
// 这是因为0在JavaScript条件判断中表示假
//因此这个默认参数我们可能会改写成
b = b === 'undefined' ? 10:b;
这样就可以解决b为0的问题了。但是这样写就会看上去比较麻烦,不好看,因此ES6出了一个参数默认值的写法
function fnc(a,b=10){
return a+b;
}
fnc(10,0) // 返回20
这样就算b传入0也能正确返回我们想要的值。
剩余参数
在ES5中当我们不确定参数都有哪些时,一般我们会去使用arguments来展示,
function fn (a,b,arguments){
return arguments;
}
var test = fn(1,2,3,4,5,6,7) ;
console.log(test) // [1,2,3,4,5,6,7]
arguments将所有参数包含在一个数组内,但是我们的函数方法已经确定了a,b;此时并不想让它们两者也包含在其中,ES6对此就推出了很实用的方式,利用 ‘…’加上一个参数名就可以搞定。
function fn ( a, b, ...rest ){
return rest ;
}
var test = fn(1,2,3,4,5,6,7) ;
console.log(test) // [3,4,5,6,7]
如此,a对应1,b对应2,剩下的参数变成一个数组放置在rest中。
注意:在这里剩余参数必须写在传参的最后一项。
箭头函数
a. 箭头函数中的this对象就是定义时所在的对象,而不是使用时所在的对象;
b. 箭头函数不能当做构造函数,也就是不能使用new的方式去构建;
c. 在箭头函数中没有arguments这个对象,可以使用rest代替;
d. 不可以使用yield命令,因此箭头函数不能用作Generator函数。
箭头函数的使用:
// 普通函数写法
function fn(a,b){
return a+b;
}
//箭头函数写法
var fn = (a,b)=>{return a+b};
//当函数体内只有一条语句,同时也是返回值的时候,还可以简化成
var fn = (a, b) => a+b;
//当参数只有一个的时候,可以去掉参数的()括号,简写成
var fn = a => a+10;
// 注意,箭头函数的函数体部分简写的时候,要注意返回的是什么,如果是一个对象,不能直接写成
var fn = () => { a:3 };
// 而是应该用()将返回的对象包起来
var fn = () => ( { a:3 } )