JavaScript之函数的定义和调用&&arguments和rest参数

参考自廖雪峰老师官方网站的JavaScript教程
以下是对于函数的定义和调用&&arguments和rest参数的一些简单总结,用以日后复习

函数的定义

函数的定义

        function abs(x){
            if( x >= 0 ){
                return x;
            }else{
                return -x;
            }
        }

注意: 函数执行到return语句就执行完毕,返回结果。如果没有return语句,会返回一个undefined

函数其实也是一个对象,函数名可以视为指向该函数的变量,所以

第二种定义函数的方式

        var abs = function(x){
            if( x >= 0 ){
                return x;
            }else{
                return -x;
            }
        };

上面两种方式完全等价,但是第二种定义方式需要在末尾加上一个分号,表示赋值语句结束。

函数的调用

调用函数时,按顺序传入参数即可

abs(10);

javascript允许传入任意个参数而不影响调用,因此传入的参数比实际需要的参数多也没问题

        abs(10,'aaaa');//返回10

传入的参数少也没问题

abs();//NaN     该函数收到的参数为undefined,计算结果为NaN

避免收到undefined,可以对参数进行检查

        function abs(x){
            if( typeof x != 'number' ){
                throw 'Not a Number';
            }
            if( x >= 0 ){
                return x;
            }else{
                return -x;
            }
        }

arguments

arguments指向传入的所有参数,它类似一个数组,但是不是数组

        function foo(x){
            console.log(x);//10
            for( var i = 0; i < arguments.length; i++ ){
                console.log(arguments[i])   //10 20 30
            }
        }
        foo(10,20,30)

利用arguments可以获得传入的所有参数,即使函数没有形参,也还是可以拿到参数的值

        function abs(){
            if( arguments.length === 0 ){
                return 0;
            }
            var x = arguments[0];
            return x>0?x:-x;
        }
        abs();  //0
        abs(10);//10
        abs(-10);//10

事实上arguments最常用于判断传入参数的个数
foo(a,[b],c) 传入2-3个参数,b是可选参数, 若只传两个参数,b默认为null

        function foo(a,b,c){
            if( arguments.length === 2 ){
                //实际拿到的是a和b两个参数,c为undefined
                c = b;
                b = null;
            }
        }

rest参数

JavaScript允许函数接收任意个参数,于是我们就不得不用arguments来接收所有参数

        function foo(a,b){
            var i,rest = [];
            if( arguments.length > 2 ){
                for( i = 2; i < arguments.length; i++ ){
                    rest.push(arguments[i]);
                }
            }
            console.log(a);
            console.log(b);
            console.log(rest);
        }

这种写法可以获取到额外的参数,把额外的参数放在一个rest数组里
ES6引入了rest参数
上面函数可以改写为

 function foo(a,b,...rest){
        console.log(a);
        console.log(b);
        console.log(rest);
    }
    //如果正常的参数都没有接收完全,也不要紧,rest参数会接收一个空数组,注意不是undefined
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值