第五章 函数

本文详细介绍了JavaScript中的变量、函数及其使用规范。包括变量的声明与调用、函数的声明方式、参数传递机制以及arguments对象的应用。还讨论了return语句的作用、预解析和预赋值的概念,并强调了纯函数和函数抽象的重要性。
摘要由CSDN通过智能技术生成

一、变量

1、如果变量在整个script中没有定义,直接使用或者打印,就会报错 b is not defined ;

2、如果变量在整个script中定义了,但是在定义前使用,则得到结果是undefined,不会报错 ;

3、如果在定义后使用则可以正确调用 ;

二、函数

含义:函数就是存储具有重复功能的代码

语法:第一种方式:声明式函数==function 函数名(形参1,形参2){执行体}

        第二种方式:赋值式函数==var 函数名=function(形参1,形参2){执行体};

函数的调用:函数名(实参1,实参2); 且也可以在函数中写另外一个函数;

注意:声明式的函数调用时,可以存放在页面中任何位置,但是赋值式的不可以,只能是在函数定义之后;

函数的封装:就是把一个或者多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口,类似快递打包;

三、函数的参数

1、实参:给形参进行赋值,从左到右的顺序,依次赋值;

2、形参:一个特殊的变量,只能在函数内部使用,定义变量;

注意:形参和实参的执行过程:先执行的函数调用,之后形参接收到实参,之后执行下面的代码;

3、参数的个数:可以有多个,用逗号隔开即可;

  • 若实参大于形参,会出现实参丢失的情况,从左到右的顺序复制;
  • 若实参小于形参,多余的变量会出现undefined的情况;

4、若我们忘记参数的时候,可以给一个提醒或者是默认值,以防止我们调用或者是其他人调用的时候忘记;

if(sum == undefined){
    //第一种
    alert('请传入参数')
    //第二种:这里如果使用log的话,可能提示不太明显,注意不到,可以使用此方法
    console.error('请传入参数')
}

或者给一个默认值:sum=变量的值

四、arguments

含义:是函数的内置对象,且只有函数有,作用可以存储函数实参的所有数据,是一个伪数组,无法使用数组的方法,且arguments是从0开始的;

伪数组的特点:有长度、有下标(0,1,2,3...)即按照索引方式存储数据、不具有数组push、pop等方法;

用途:当我们不确定有多少个参数传递的时候,可以用arguments获取,所有的函数中都存在一个arguments内置对象,arguments存放了所有传递的实参

function fn(){
            console.log(arguments);
            // 把每一项拿出来
           /*  console.log(arguments[0]);
            console.log(arguments[1]);
            console.log(arguments[2]); */
            // 第一种求和
           /*  var res=arguments[0]+arguments[1]+arguments[2];
            console.log(res); */

            // 第二种
            var sum=0
            for(var i=0;i<arguments.length;i++){
                console.log(arguments[i]);
                sum+=arguments[i]
            }
            console.log(sum);

        }
        fn(1,2,3,)

五、return 的作用

  • 函数返回值,可以在函数外面获取函数里面的值res;
  • 组织代码的执行,return之后的代码都不再执行;

注意:(1)在函数外获取res的时候,我们需要在函数里面,return res ,之后重新定义一个变量n=函数,之后输出n即可;

(2)如果函数写了返回值return,后面没有内容,那么函数的返回结果就是undefined;

        如果进行了折行操作,那么折行后的内容会被当做正常代码解析,不会输出;

(3)如果函数没有写返回值return,那么调用函数的返回值的时候结果为undefined;

六、预解析:

含义:在执行到script标签时,将当前script标签中的var定义的变量现在内存中开辟存储空间,并且 设定为undefined。在实际代码执行到var定义值之前这个变量已经存在,并且值为undefined,当执行到 var定义位置之后,这个变量才真实赋值为对应的结果。


        // 第一种情况 :var  
        document.write(num) //输出是undefined
        var num=10
        document.write(num) //输出是10
        // 分析:1、预解析的时候会把带有 var 和function 关键字的变量进行提升,提升到最前面
        //        2、提升的只是等号左侧的内容


        //第二种情况: function  
        fn() //123
        function  fn(){
            var n1=10 //这个n1并不会进行预解析,只有等函数的调用之后才会开始预解析
            document.write(123)
        }
        fn() //123
        //分析:页面加载,首先会被作为字符串的形式提升到最上面,也就是浏览器在真正的赋值之前,已经知道了fn()是可以执行的

        // 第三种情况: 赋值式函数
        fnn(); //这里会报错,
        var fnn =function(){
            document.write(456)
        }
        fnn() //456
        //分析:页面加载,页面只提升了fnn,那么此时的fnn就是一个变量名,接下来就从上往下解析,fnn是变量不是函数,所以fnn()就报错了

注意:如果变量名和函数名一样,优先执行函数

七、预赋值

含义:使用function直接定义的函数,在script标签刚开始时,就会预解析存储函数名在存储空间中,并且同时 将函数体这个引用地址赋值给这个存储空间中

八、 纯函数

函数中没有调用到外部的全局变量,也不会改变全局变量的结果,这个函数体是一个独立的存在,这种函数叫做纯函数

九、函数抽象

为了能够更好的将函数独立出来,只解决需要部分内容,达到纯函数,就要将函数内所有的部分独立不调用外部的变量,由函数的参数决定该函数执行后果,这种脱离整个项目结构的函数就是函数抽象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值