@captainjack
2017-11-20T08:41:29.000000Z
字数 1167
阅读 179
es6
1.函数参数的默认值
以前的写法:
function (x,y){
y = y||'world'
/*...*/
}
es6写法:
function (x, y = 'world'){
console.log(x,y);
}
对比:
与解构赋值默认值结合使用
function foo({x,y = 'world'}){
console.log(x,y)
};
foo({});
foo({x:'hello'});
foo({x:'hello',y:'beauty'});
foo();
注意事项:
参数默认值的位置(尾参数)
function (x, y = 'world',z){
console.log(x,y,z);
}
指定了默认值以后,函数的length属性将返回没有指定默认值的参数个数
(function(a){}).length //1
(function(a = 1){}).length //0
The length property indicates the number of named arguments that the function expects.
2.rest参数
es6引入了rest参数(形式为"...变量名"),用于获取函数的多余参数.
function add(...values){
let sum = 0;
for(var val of values){
sum += val;
}
return sum;
}
console.log(add(1,2,3));
注意:rest参数之后不能再有其他参数(只能是最后一个参数),否则会报语法错误.
另外,函数的length属性也不包括rest参数
3.扩展运算符
扩展运算符(spread)是三个点(...),它好比rest参数的逆运算,将一个数组转为用逗号分隔的参数序列
console.log(1,...[2,3,4],5);
用途:
替代数组的apply方法
Math.max.apply(null,[1,2,3]);
Math.max(...[1,2,3]);
4.函数绑定
箭头函数可以绑定this对象,大大减少显示绑定this对象的写法(call,apply,bind).但是箭头函数并非使用于所有场合,所以ES7提出了'绑定函数'(function bind)运算符,用来取代call,apply,bind调用.
foo::bar(...arguments);
//等同于
bar.apply(foo,...arguments);
如果双冒号左边为空,右边是一个对象的方法,则等同于将该方法绑定在改对象上
var method = obj::obj.foo;
//等同于
var method = ::obj.foo;