ES6--默认参数

1. 基本写法

    在es6中,给函数参数赋默认值有了简单写法:

function fn(x=1, y=7, z=42){

    return x + y + z;

}

fn();//50

fn(2);//51

在未传参数时,x,y,z默认使用1, 7, 42,当传入参数时,就使用传入的参数,

就完成了给函数赋默认值的作用。

此外还有一种写法:

function fn(x=1, y=x + 7, z=42){

    return x + y + z;

}

fn(1);//51 = 1 + (1+7) + 42

注意,这种写法是有要求的,只能后面引用前面,即 y = x + 1; z = x + y ;不能写x = y+ z这种,不然会报 

" y(z) is not defined"错误。



2. 参数检查

function fnCheck(){

    throw new Error('can\'t be empty');

}

function fn(x=fnCheck(), y=7, z=42){

    return x+y+z;

}

fn(1);//50 = 1+7+42

fn();// can't be empty

try{

    fn();

} catch (e){

console.log(e);//can't be empty

} finally{

}

解释:执行fn(),因为没有赋值,所以执行默认参数x=fnCheck(),那就执行了 throw new Error('can\'t be empty');


3. 可变参数处理

    因为js函数的特殊性,调用函数的时候传的参数是没有严格限制的,比如:

fn(){

//函数体语句

};

然后:fn(1,2,3);

          fn(1,2,3,4);

用户调用fn可能会传入不同个数的参数,我们要想获取这些参数,在ES5的时候要这样:

先说明一下MDN对arguments的描述:

arguments对象是所有(非箭头)函数中都可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。此对象包含传递给函数的每个参数的条目,第一个条目的索引从0开始。

arguments对象不是一个 Array 。它类似于Array,但除了length属性和索引元素之外没有任何Array属性。例如,它没有 pop 方法。但是它可以被转换为一个真正的Array

var args = Array.prototype.slice.call(arguments);
var args = [].slice.call(arguments);

// ES2015
const args = Array.from(arguments);

   3.1 ES5中,我们可以这样写fn:

        function fn(){

        var a = Array.prototype.slice.call(arguments);//或者 var a= Array.from(arguments);

        var sum= 0;

        .forEach(function(item){

        sum += item;

        })

    return sum;

    };

    fn(1,2,3);//6

    fn(1,2,3,4);//10

说白了arguments就是js送给我们的参数,指的就是引用函数时传入的参数,和this啥的一样,不用自己定义就能拿来用,都提前被js定义好了的。

另外,也可以用箭头函数改写一下,注意, arguments 对象是所有(非箭头)函数中都可用的 局部变量,这里我们用在a.forEach()上面:

    function fn(){
        var a = Array.prototype.slice.call(arguments);//或者 var a= Array.from(arguments);

        var sum= 0;

        a.forEach(v=>{

        sum +=v;
    })
    return sum;

    }

    3.2 ES6中, 我们可以这样写:

    function fn(...a){

        var sum = 0;

        a.forEach(v=>{

             sum += v;

        });

        return sum;

    }

    fn(1,2,3);//6

   fn(1,2,3,4);//10

猜你喜欢

转载自blog.csdn.net/qq_15241071/article/details/79944874