函数的扩展

  • 函数参数的默认值

    利用参数默认值,可以制定某一个参数不得省略,如果省略就抛出一个错误

    function throwIfMissing(){
        throw new Error('Missing parameter');
    }
    
    function foo(mustBeProvided = throwIfMissing()){
        return mustBeProvided;
    }
  • rest参数
    ES6引入了rest参数(…参数名),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest参数搭配的变量一个数组,该变量将多余的参数放入数组中。

    function add(...values){
        let sum = 0;
    
        for(var val of values){
            sum += val;
        }
    
        return sum;
        }
    
        add(2, 5, 3) //10

    rest参数中的变量代表一个数组,所以数组特有的方案都可以用于这个变量。下面是一个利用rest参数改写数组push方法的例子

    function push(array,...items){
        items.forEach(function(item){
            array.push(item);
            console.log(item);
        });
    }
    
    var a = [];
    push(a,1,2,3);

    注意,rest参数之后不能再有其他参数,否则会报错。

  • 扩展运算符(即将数组转化为用逗号分隔的参数序列)
    该运算符主要用于函数调用

    function push(array,...items){
        array.push(...items);
    }
    function add(x,y){
        return x + y;      //将数组转为参数序列
    }
    var numbers = [4,38];
    add(...numbers) //42

    扩展运算符(spead)可以简化求出一个数组最大元素的写法
    //ES5
    Math.max.apply(null,[14,3,88])

//ES6
Math.max(…[14,3,88])

//等同于
Math.max(14,3,88])
上面代码表示,由于javascript不提供求数组最大元素的函数,所以只能套用Math.max函数,将数组转化为一个参数序列,然后求最大值。有了扩展运算符以后,就可以只用用Math.max了。

扩展运算符还可以用于数组的赋值

```
var a = [1];
var b = [2,3,4];
var c = [6,7];
var d = [0, ...a, ...b, 5, ...c];
d   //[0, 1, 2, 3, 4, 5, 6, 7]
```
  • 箭头函数
    ES6允许使用箭头(=>)定义函数
var f = v => v;
//等同于
var f = function(v){
    return v;
    };

如果箭头函数不需要参数或需要多个参数,就使用一对圆括号代表参数部分

    var f = () => 5;
    //等同于
    var f = function(){return 5};

    var sum = (num1,num2) =>num1 + num2;

如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回。

    return getTempItem = id => ({ id :id, name: "Temp"});

箭头函数的一个用处是简化回调函数

//正常函数写法
[1,2,3].map(function (x){
    return x*x;
    });
//箭头函数写法
[1,2,3].map(x => x*x);

另一个例子
//正常函数写法
var result = values.sort(function(a,b){
    return a - b;
    });
//箭头函数写法
var result = values.sort((a,b)=> a - b);

箭头函数由几个使用注意点:
1.函数体内的this对象,绑定定义时所在的对象,而不是使用时所在的对象。
2.不可以当做构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
3.不可以使用arguments对象,该对象在函数体内部存在。
4.由于this在箭头函数中被绑定,所以不能用call(), apply(),bind()这些方法去改变this的指向。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值