《JavaScript高级程序设计 (第3版)》学习笔记6:chapter_3 - 4 函数(基础)

让学习“上瘾”,成为更好的自己!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>functionUsing</title>
</head>
    <script>
         /*
         1, ECMAScript中的函数在定义时不必指定是否返回值
         2,任何函数在任何时候都可以通过return语句后跟要返回的值来实现返回值
         3,return语句可以不带任何返回值,此时,函数在停止执行后会返回undefined值
         
         【注意】 要么让函数始终都返回一个值,要么都不要返回值
         
         4,理解参数
            a, 定义函数只接收两个参数,传递参数时可以多于2或者少于2个
                why? --> ECMAScript 中的参数在内部是用一个数组表示的,函数接收的始终都是这个数组,而不关心数组中包含哪些参数(如果有参数的话)         
            b, “函数体内可以通过“arguments对象”(与数组类似)来访问这个参数数组,从而获取传递给函数的每一个参数
                通过访问arguments对象的length属性 --> 可以获取有多少个参数传递给了函数
                arguments对象可以与命名的参数一起使用,arguments对象对应元素的值与命名参数的值保持同步
            c, 没有重载
                ECMAScript函数没有签名(Java),因为其参数是由零或多个值的数组来表示的
                没有函数签名,重载不可能做到
                但可以有类似以下的写法模仿方法的重载:
                    function doAdd(){
                        if(arguments.length == 1){
                            alert(arguments[0] + 10);
                        }else if(arguments.length.length == 2){
                            alert(arguments[0] + arguments[1]);

                        }

                    }


         */
        // function sayHi(name, message){
        //     alert('hello, '+name+', '+message);

        // }
            // ===============等价书写=================
        function sayHi(){
            alert('hello, '+arguments[0]+', '+arguments[1]); // 表明ECMAScript函数的一个特点:命名的参数只提供便利,但不是必需

        }

        sayHi('kai','you are right about that!','abab','cdcd'); // 参数的理解
            
        // function addNum(num1, num2){
        //     return num1 + num2;
        // } 
        // alert(addNum(12,23));
        
        
        // function noReturn(){
        //     return;
        // }

        // alert(noReturn());  // undefined

        function showHowManyArgs(){
            alert(arguments.length);

        }
        
        showHowManyArgs(12,'ere',23);
        showHowManyArgs(12,'ere',23,'0');
        showHowManyArgs(12,'ere');
     
     function doAdd(num1, num2, num3){
         arguments[1] = 10;  // 每次调用都会重写第二个参数
         alert(arguments[0] + num2);
         // arguments对象可以与命名的参数一起使用,arguments对象对应元素的值与命名参数的值保持同步
         // 单向影响: 修改命名参数不会改变arguments中对应的值
         // arguments对象的长度是由传入的参数个数决定的,不是由定义函数时命名参数的个数决定的
         // 没有传递值的命名参数被自动赋予undefined值!!!   见doAdd(12)结果
         // ECMAScript中的所有参数的传递都是值传递,不可能通过引用(地址)传递参数

     }
        // doAdd(12, 43);  // 22
        // doAdd(12); // NaN  --> 传入一个参数,为argument[1]设置的值不会反映到命名参数中


        // 类似方法重载的写法
        function doAdd(){
            console.log(arguments);
            if(arguments.length == 1){
                alert(arguments[0] + 10);
            }else if(arguments.length == 2){
                alert(arguments[0] + arguments[1]);

            }

        }

        doAdd(12); // 12 + 10
        doAdd(1,23); // 1 + 23



    </script>


<body>
    
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值