javascript入门4(0801)

1.函数的参数的个数问题

        <script>

            /*

                函数参数的个数问题:

                    1、当给出形参,但却没有传入实参,则值为undefined

                    2、当形参的个数大于实参的个数

                    3、当形参的个数等于实参的个数

                    4、当形参的个数小于实参的个数

                    5、给出实参,但未设置形参


             */


            // 1、当给出形参,但却没有传入实参,则值为undefined

            function fun1(a,b){

                console.log(a)//undefined

                console.log(b)//undefined

            }

            fun1();



            // 2、当形参的个数大于实参的个数

            function fun2(a,b){

                console.log(a)//10

                console.log(b)//undefined

            }


            fun2(10);


            // 3、当形参的个数等于实参的个数

            function fun3(a,b){

                console.log(a)//10

                console.log(b)//20

            }

            fun3(10,20);


            // 4、当形参的个数小于实参的个数

            function fun4(a){

                console.log(a)//10


            }

            fun4(10,20);


            // 5、给出实参,但未设置形参

            function fun5(){

                // 传入的实参可以用arguments接受,返回一个数组

                console.log(arguments);


            }

            fun5(10,20)

        </script>

2.返回值的情况

        <script>

            /*

                函数的返回值

                    1、函数调用后未给出return,值为undefined

                    2、函数调用后给出return,但没有具体的值

                    3、函数运行后给出return,并给出具体的值

                    4、函数的返回值后面的代码不执行

                    5、函数的返回值可以返回对象


             */

            // 1、函数调用后未给出return

            function fun1(){

                console.log('今天建军节');

            }


            var res = fun1();

            console.log(res);//undefined


            // 2、函数调用后给出return,但没有具体的值

            function fun2(){

                console.log('今天建军节');

                return

            }


            var res = fun2();

            console.log(res);//undefined


            // 3、函数运行后给出return,并给出具体的值

            function plus(a,b){

                return a+b;

            }

            var res = plus(4,9);

            console.log(res)


            // 4、函数的返回值后面的代码不执行

            function plus(a,b){

                console.log('快来撩我');

                return a+b;

                console.log('捉迷藏');

            }

            var res = plus(4,9);

            console.log(res)


            // 5、函数的返回值可以返回对象

            function fun5(){

                var name = '向同学';


                // var obj = {

                //  name:'翁宇',

                //  age:18

                // }

                return {

                    name:'翁宇',

                    age:18

                };

            }


            var res = fun5();

            console.log(res);

        </script>

3.全局变量和局部变量

        <script>

            /*

                全局变量和局部变量

                    全局变量

                        定义:在函数体外部定义的变量,且在函数体内部未采用var声明的变量

                        作用域:在函数体的内部或者外部被访问和修改


                    局部变量

                        定义:在函数体的内部采用var声明的变量

                        作用域:只能在函数体的内部被访问和修改



                注意:一般将变量定义放在最前面

             */


            // 全局变量

            var num = 10;


            num = 20;

            // console.log(num)


            function fun(a){

                num = 50;

            }

            console.log(num);//20


            fun();

            console.log(num);//50




            function demo(a){

                // 局部变量

                var age = 18;

                var num = 30;



                // 在函数体内部未采用var声明的变量为全局变量

                sex = '男';

                console.log(age);

            }


            //报错原因: 函数运行结束后,该变量所占的内存空间则会被释放

            // console.log(age);//age is not defined

            demo();

            // console.log(age);//age is not defined


            console.log(sex);

        </script>

4.全局变量和局部变量的区别

        <script>

            /*

                全局变量和局部变量


                局部变量:

                    避免变量取名问题

                    函数结束后,该变量则释放,则不占内存


                全局变量:

                    一直保存在内存中,直至整个js运行完毕

                    全局变量会造成变量的污染


             建议:编程建议使用局部变量

             */

            // 全局变量

            var num = 10;

            var flag = false;


            function fun(){

                // 局部变量

                var age = 20;

                console.log(age)

            }


            function demo(){

                var age = 30;

                console.log(age)

            }


            fun()

            demo()


            // if(){

            //  flag = true;

            // }else{

            //  flag = false;

            // }

        </script>

5.函数的作用域链

        <script>

            var num1 = 10;

            function fun1(){


                //对于fun2 全局变量

                var num2 = 20;

                function fun2(){

                    // num2对于fun2而言是全局变量

                    console.log(num2);


                    function fun3(){

                        // 局部变量

                        var num2 = 50;

                        console.log(num1);

                        console.log(num2);//50

                    }

                    fun3();

                }

                fun2(); 

            }


            fun1();


            /*

                当局部变量和全局变量冲突时,优先使用局部变量


                作用域链:函数会一级一级的向上查找变量,直到找到为止,反之不成立


             */


        </script>

6.全局函数和局部函数

        <script>

            // 外部函数

            function outside(){

                var num = 10;

                console.log(num)

                // inside()


                // 内部函数

                function inside(){

                    var res=num+5;

                    console.log(res)

                }


            }


            outside();

            inside();// 报错inside is not defined

        </script>

7.闭包函数

        <script>

            /*

                闭包函数:当内部函数在其作用域之外被调用则形成了内部函数的闭包


                闭包函数:

                    优点:可以让内部函数在作用域外被调用

                    缺点:闭包函数占内存,且可能引起内存泄漏


                    解决方案:在闭包结束时将变量销毁(赋值为空)



             */

            // 外部函数


            function outside(){

                var num = 10;

                console.log(num);


                // 内部函数

                var inside = function(){

                    var sum = num + 5;

                    num++;//11  12  13  14

                    console.log(sum)


                    // 销毁变量

                    // num = undefined;

                }


                return inside;

            }


            var res = outside();

            // console.log(res);

            res();

            outside()

            res();

            outside()

            res();

            outside()

            res();

            // inside();// inside is not defined

        </script>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容