JavaScript-函数学习总结

1、定义:程序中封装一项任务的步骤清单的代码段,再起一个任务名

                函数是一个引用类型的对象

     对象:内存中一块同时存储多个值的空间

    何时使用:发现一项任务会被反复调用,要先将任务步骤封装为一个函数,再反复调用。

    如何声明函数:

        function 任务名([参数变量列表]){

            步骤清单代码段;

            [return 返回值];

        }

    如何调用函数:函数名([参数值列表]);

    强调:1、函数只有在调用时,才会执行!

              2、函数可被反复调用!——代码重用(提高复用性,便于维护,一次定义处处可用,一次修改处处生效。。。)

    参数变量:专门接收方法执行所必须的数据的变量

    何时使用:如果一个函数,必须提供指定数据,才能正常执行时,

                      需要提供几个数据,就定义几个参数接收

    如何使用参数:无需var,直接在函数名后的括号中定义参数名,每个参数名用逗号分隔;

    何时,如何传入参数值:调用时,按照参数定义的个数和顺序传入

    为什么使用参数:参数可以让方法变得更灵活;

2、内存中函数生命周期(函数执行过程):

    1、定义时:将函数直接封装在一个对象中保存

                        函数名,其实是指向对象的一个变量

                        定义时,不会读取函数的内容(所以就算函数体中有错误,也不会报错,不会影响函数之后的内容执行)

    2、调用时:在执行环境中增加一个当前函数的执行环境对象

                    才会逐行读取并执行函数的内容

    3、调用后:函数的执行环境弹出,活动对象被释放,内存中又恢复到定义时的样子

图1-1函数执行时的大概过程

    

                                                               图 1-2 定义时和调用后

                                                                    图1-3函数执行过程                                           

3、作用域:一个变量的可用范围

                    本质其实是一个存储多个变量的对象

    2种:1、全局作用域:专门保存全局变量的对象

                    全局变量:在任何时候任何位置都可被访问

             2、函数作用域:专门保存函数内部的局部变量的对象

                                                    ——活动对象

                    局部变量:2类:1、所有的参数变量

                                              2、在函数内部声明(var出来)的变量

                                                      只在函数调用时函数内部才可用

概念解释:

活动对象:专门保存*本次*函数调用时需要的所有数据的对象。

页面刚加载时:会有一个执行环境栈(ECS) ,ECS 中只有一个全局(EC)元素

                     全局 EC 引用 window 对象

 声明时: 首选创建函数对象: 专门存储函数定义的空间 ---函数名指向这个函数对象

函数调用时,执行环境栈(ECS)中会压入一个函数执行环境 EC ,同时函数执行环境 EC为本次函数调用创建活动对象 AO  调用时自动创建,调用后自动释放。 

调用时: 使用*当前引擎所在的 EC*中的变量,执行函数体中的步骤清单。

 调用后: 本地函数调用的 EC 出栈->活动对象 AO 释放

4、返回值:函数调用的执行结果

    何时使用:只要函数的执行,需要有明确的返回结果时,要看调用者是否需要获得执行结果;

                    (定义几个参数,起什么函数名看谁:看函数定义本身需要不需要)

    何时如何获得返回值:调用时:

                                        var 变量=函数名(xx)

                    返回值只能是一个值不能是多个

5、***按值传递:两变量间赋值或向函数中传递参数时,

                            都是将原变量中的值复制一个副本给对方

                            修改一方,另一方不受影响

6、***声明提前:在正式执行程序之前,都会先预读所有var 声明的变量function声明的函数,集中到当前作用域的顶部集中声明,赋值留在原地

7.定义函数的第二种方法:

    var  函数名= function(参数){函数体;return 返回值}

VS 声明函数

    第二种方法,函数定义不会提前,仅函数名提前

    声明函数,整体(函数名+函数定义)提前

总结一:如果一个表达式或函数有结果,就可直接当一个值用

猜你喜欢

转载自blog.csdn.net/pingjiali/article/details/80881977
今日推荐