[关闭]
@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);
}

对比:

  1. 不看函数体就能够知道有默认值存在
  2. 参数值为false的情况
  3. 利于将来代码优化,即使未来的版本彻底拿掉这个参数,也不会导致以前的代码无法运行;

与解构赋值默认值结合使用

function foo({x,y = 'world'}){
  console.log(x,y)
};

foo({});
foo({x:'hello'});
foo({x:'hello',y:'beauty'});
foo();

注意事项:

  1. 参数默认值的位置(尾参数)

    function (x, y = 'world',z){
    console.log(x,y,z);
    }

  2. 指定了默认值以后,函数的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);

用途:

  1. 替代数组的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;

最后 立一个flag 一定要好好讲一下promise对象

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注