2022/1/8

2022/1/8号

一、JavaScript

(1)函数初始化参数

(参数默认值的问题)

参数的默认值,如果你不设置,就是undefined

function test(a,b){
            
        console.log(a);//1
        console.log(b);//undefined

    }
    test(1);
function test(a = 1,b){
            
        console.log(a);//1
        console.log(b);//undefined

    }
    test();

注意:

1.如果在实参给a赋值2,形参给a赋值1

function test(a=1){

        console.log(a);//2

    }
    test(2);

2.如果给a实参赋值undefined,形参赋值1

function test(a=1,b){

        console.log(a);//1
        console.log(b);//2
    }
    test(undefined,2);

相反,如果给a实参赋值1,形参赋值undefined

function test(a=undefined,b){

        console.log(a);//1
        console.log(b);//2
    }
    test(1,2);

总结:

如果arguments[0](实参)是undefined; a(形参)是 1;那么就选择形参上的默认值。

相反如果arguments[0]是1; a 是 undefined ,则选择实参上的默认值。

即:是不是undefined,就选谁的值这也是映射关系

注意:

这种给形参赋值的做法,是不兼容的。function test(a = 1,b = 2)

这是es6的写法,这是2015这个版本新增的一个特性,es5是不可以这么写的。

方法一:曲线救国(写法简单)

 function test(a,b){

        var a =arguments[0]||1;//如果不存在返回1
        var b =arguments[1]||2;//如果不存在返回2
        console.log(a+b);//3
    }
    test();

如果实参存在值,则返回该值

function test(a,b){

        var a =arguments[0]||1;//如果不存在返回1
        var b =arguments[1]||2;//如果不存在返回2
        console.log(a+b);//7
    }
    test(3,4);

方法二:typeof(推荐这么写)

**注:**typeof打印出来的都是字符串

function test(a,b){

        // var a =arguments[0]||1;//如果不存在返回1
        // var b =arguments[1]||2;//如果不存在返回2
        if(typeof(arguments[0])!=='undefined'){
            a = arguments[0];
            
        }else{
            a = 1;
        }
        if(typeof(arguments[1])!=='undefined'){

            b=arguments[1];

        }else{
            b=2
        }
        console.log(a+b);//3    
    }
    test();//test(3,4)时,输出7

另一种写法:

三元运算符

function test(a,b){
        var a =typeof(arguments[0])!=='undefined'?arguments[0]:1;//?代表如果条件成立,就赋值arguments[0],如果不成立就复制1
        var b =typeof(arguments[1])!=='undefined'?arguments[1]:2;
        console.log(a+b);
    }
    test();

(2)作业

1、n的阶乘,不能用 for循环

方法:递归(函数自己调用自己)

分析:

规律:n!=n*(n-1)!

出口:如果没有出口,上面会无限循环下去

   var n=prompt('请输入数字');
            function test(n){
            if(n==1){ //出口
            return 1;//当n到1是,返回1

        }
            
            return n * test(n-1);
            
        }
        console.log(test(n));

用递归解决方法,首先,要把规律找到,然后找到一个出口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值