由浅入深JavaScript5基础-数组和函数2

时间:2021-05-06 19:15:41
JavaScript函数

什么是函数

    函数是一组封装了特定功能的代码块,可以随时随地的运行的语句。
    函数由关键字function,函数名,参数,函数体和返回值构成。

函数的声明:
    函数声明使用关键字function + 函数名称。
    以下是一个函数的完整样例
    eg: function  showName(name){
            var result = name +"hello";
            return result;
        }
    关键字function ,函数名showName,参数name,
    执行体 var result = name +"hello";
    返回值:return result;
    
函数的调用:
    函数的使用直接函数名加括号来调用函数。有参数传入参数。
    eg: showName('JavaScript');
    我们执行
    alert(showName('JavaScript'));输出JavaScript hello
    
函数的返回值:

    函数的返回值是可有可无的,也就是说可以有return也可以无return.
    但是没有return语句的函数,ECMASCript会自动返回undefined。
    eg: function  showName(name){
            var result = name +"hello";
        }
        alert(showName('JavaScript'));//undefined

函数的arguments对象
    arguments是函数的特殊对象。它代表参数对象。使得编码无需指出参数名
    就可以访问参数。
    eg:
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <script>
                window.onload= function(){
                    var oText1 = document.getElementById('text1');
                    var oText2 = document.getElementById('text2');
                    var oBtn1 = document.getElementById('btn1');
                    oBtn1.onclick = add(1,2); //调用函数add传递参数1,2
                }
                function add(a,b){
                    alert(a);//接受参数1
                    alert(b);//接受参数2
                    alert(arguments.length);//不使用参数名a,b,使用arguments对象
                    alert(arguments[0]);//等价于a,1
                    alert(arguments[1]);//等价于b,2
                }
            </script>
        </head>
        <body>
            <input type="text" name="text1" id="text1" value=""/>
            <input type="text" name="text2" id="text2" />
            <input type="button" id="btn1" value="相加" />
        </body>
    </html>
    
    如此看来arguments对象和参数名功能一致,那arguments不是多此一举吗?
    事实上,arguments对象的作用在于不定参。有些函数参数传递个数不固定,
    这是就无法使用参数名,a,b这样的形式。
    示例如下,多个数相加,但是具体几个数字不固定,此时用arguments最好。
    eg:
        <script>
            function result(){
                var result = 0;
                for(var i = 0 ;i<arguments.length;i++){
                    result+=arguments[i];
                }
                alert(result);
            }
            result(1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9);
        </script>
        调用参数时即使传递参数个数不固定,函数result也能很好地执行。
        如果采用固定参数名 function result(num1,num2,num3……),
        是无法办到的。

函数分为内建函数和自定义函数
    上文中所写的函数都为我们自己写的函数称为自定义函数,在js里还有大量的
    内建函数,即js定义的函数,如,String对象的 toString(),subString()
    array.sort()等等,我们已经见过很多

    
全局函数和局部函数
    全局函数定义在<script>标定里,在签里都可以使用。
    局部函数定义在函数内部,只能在其外部函数里使用。

    eg:
        <script>
            function show(name){
                function say(){
                    alert('say hello');
                }
                say();
                alert(name);
            }
            show('js');
        </script>
    对于函数show就是全局函数,对于函数say就是局部函数

匿名函数:所谓的匿名函数就是没有名字的函数,除此以外和普通的函数一样。
    eg:
        <script>
            window.onload = function(){//匿名函数
                function aaa(){//局部普通函数
                    alert('aaa');
                }
                var btn = document.getElementById('btn1');
                btn.onclick = function(){//局部匿名函数
                    alert('btn click');
                }
                aaa();//局部函数只能在其嵌套的函数里用
                bbb();//全局函数在哪里访问都可以
            }
            function bbb(){//全局普通函数
                alert('bbb');
            }
            var test = function(){//全局匿名函数
                alert('test');
            }
            test();//全局函数在哪里访问都可以
        </script>

函数闭包
    闭包,指的是词法表示包括不被计算的变量的函数,
    也就是说,函数可以使用函数之外定义的变量。
        
简单闭包
    再函数里使用全局变量
            <script>
            var a = 'hello';
            function aaa(){
                var result = a;
                alert(result);
            }
            aaa();
        </script>
复杂闭包:
    在函数里使用另一个函数,内部函数是一个闭包。
    内部函数没有用参数接受变量,直接使用父函数的变量。
        
        
        <script>
            var num = 2;
            function bbb(){
                var bnum = 1;
                function ccc(){
                    alert(bnum+num);//3
                }
                return ccc();
            }
            bbb();
        </script>

总结:闭包就是函数里能用函数外的值



——总结——

限于文章篇幅原因,这里仅仅介绍冰山一角。由于笔者的水平有限,编写时间也很仓促,
文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正