函数的扩展

来源:互联网 发布:国外的域名需要备案吗 编辑:程序博客网 时间:2024/06/16 20:52
  • 函数参数的默认值

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

    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