javaScript之函数,分支结构 (一)

来源:互联网 发布:海尔收购三洋 知乎 编辑:程序博客网 时间:2024/06/06 03:49

***函数:封装一项任务的步骤清单的代码段,再起一个任务名

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

    如何声明函数:

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

                   步骤清单代码段

                   [return返回值]

         }

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

    强调:

        1.函数只有被调用时才会被执行

        2.函数可被反复调用  --代码重用


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

    何时使用:如果一个函数,必须提供指定数据,才能正常执行时,需要提供几个数据,就定义几个参数接收

    如何定义参数:不需要var,直接在函数名后的括号中定义参数名  --每个参数名之间用逗号分割

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

    为什么使用参数:参数可让方法变的更加灵活


***内存中函数的生命周期:

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

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

        ***定义时,不会读取函数的内容

    2.调用时:在执行环境中增加一个当前函数的执行环境对象,才会逐行读取并执行函数的内容

    3.调用后:函数的执行环境和活动对象,弹出


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

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

    2种:

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

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

        2.函数作用域:专门保存函数内部的局部变量的对象   --活动对象

          局部变量:

                2类:

                    1.参数变量

                    2.在函数声明的变量(var)

                --只在函数调用时的函数内部才可以使用

笔试题:

例1:局部变量

var n=100;function fun(n){    n++;    console.log(n);}fun(100);//101console.log(n);//100

例2:使用全局作用域:

var n=100function fun(){      n++;      console.log(n)}//没有自带的n,到全局中找n,将n带入,结果为  fun();//101  console.log(n);//101


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

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

    如何定义返回值:在函数定义结尾:return 返回值

    如何获得返回值:

                    调用时: var 变量=函数名(xxx);


    ***按值传递:两变量间赋值或向函数中传递参数时,都是将原变量中的值复制一个副本给对方

        即:修改一方,另一方不熟影响


例1:

var n=100;    var m=n;//按值传递:n将自己的值,复制一个副本给m,该m,不影响n,反之亦然    n++;    console.log(m);//100 两个互不影响

例2:

function buy(card){    card-=3;    console.log(card);}var card=10;buy(card);//7console.log(card);//10


***声明提前:在正式执行程序前,都会先预读所以var 声明的变量

function声明的函数,集中到当前作用域的顶部集中声明 ***赋值留在原地***


定义函数的第二种方式:

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

                    =100

    例:

var fun;    fun=function(){        return 1;    };    console.log(fun());//1fun=function(){    return 2;};    console.log(fun());//2    fun=100;    console.log(fun);//100    console.log(fun());//报错


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

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


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

 问题二:如果传入参数个数不符,不会报错;个数超了;多出的没用;个数不够,未接到值得参数变量,默认值undefined

 问题三:在函数内,为没声明过的变量赋值,变量会被自动创建在全局 -->危险

    强烈建议:所有变量使用前,必须用var声明

 问题四:return 特点:

    1.return 与返回值之间不能加回车

    2.return 不能放在其他表达式中间使用


*全局函数:ES标准中规定的,浏览器厂商已经实现的,不需要任何对象即可直接调用的函数

        干扰项:BOM,凡是在BOM阶段讲的都不是全局函数

        手册中:JavaScript->JavaScript对象->jsfunctions


    encodeURI:对包含多字节符的url字符串编码为单字节符组成

    decodeURI:将encodeURI编码后的字符串,解码为原文

  为什么:url不允许包含多字节字符:比如汉字

 

  问题:url还不允许包含保留的特殊符号:比如:/

  解决:encodeURIComponent/decodeURIComponent


    eval:专门执行字符串格式的js语句  --eval("alert(‘hello’)")

            还可计算字符串格式的表达式的值

    

    infinity:无穷的的意义

        除数为0,(js中除数可以为0),结果为infinity,无穷大,可参与关系运算

        函数:isFinite(num):专门判断一个数字是否在有效范围内



*分支结构:

    程序分为3种结构: 顺序  分支  循环

    顺序:除去声明提前,其余代码默认都从上向下顺序执行

    分支:根据不同的条件,执行不同的代码

    循环:让程序反复执行一段相同代码


    分支情况:3种情况:

        1.一个条件,一件事,满足条件就做,不满足就不做

            如果操作简单:利用短路:条件&&(操作)

            如果操作复杂:if(条件){操作代码}

                            //如果满足条件,就执行操作

        2.一个条件,两件事,就满足条件做第一件事,不满足做另一件事

            如果操作简单:三目:条件1?操作1:操作2;

            如果操作复杂:if(条件){

                                                满足才执行的代码

                                                (如果前一个条件满足,则不再继续判断)

                                                }else{

                                                不满足才执行的代码

                                                 }

            完整的分支结构,都是必须且只能多选一执行

        3.多个条件,多个事,多选一执行,可一件都不执行

            简单操作:三目:条件1?操作1:

                                    条件2?操作2:

                                    条件3?操作3:

             如果复杂操作:if(条件1){

              操作1

                                           }elseif(条件2{

                                            操作2

                                            }elseif(条件3{

                                            操作3

                                            }elseif(条件4

                                            。。。。

                                                }

    强调:2点

    1.最后的else可省略,一旦所有条件都不能满足,则什么都不做

    2.条件可以任意关于运算或逻辑运算

        只要返回true和false的函数或表达式,都可当条件用
0 0