js 函数

128 阅读3分钟

什么是函数

    函数:函数是一种复杂数据类型;用来储存代码块
    作用:解决代码复用问题
    声明函数: 声明函数只会把代码块存起来,并不会直接执行
        function 函数名(){
            函数体:需要被重复使用的代码
        }
    调用函数:执行函数体代码
        函数名()
    // 声明函数
    function get(){
        console.log(`你好,我是函数`)
    }
    
    // 调用函数
    get()

函数传参

    函数传参:调用者 传递数据 给函数
        传:调用者传
           函数名(实际参数(实参))
        
        收:函数
           function 函数名(形式参数(形参)){
               函数体代码
            }
        函数传参本质:就是实参给形参赋值的过程
            函数传参是按照传入顺序一一赋值
            函数传参是一次调用传参过程都是独立的互不影响
            函数 形参数量 和 实参数量 可以不一致    
    // 定义变量接收实参(函数名的括号里边定义变量强制要求不写let)
    function get(text){
        console.log(`你好我是函数${text}`)
    }

    // 设置参数
    get('函数')

逻辑短路和默认值

    1.函数默认参数,我们自己在开发中使用不多。
    2.函数默认参数 使用 逻辑运算符短路运算(逻辑中断)
        2.1 短路运算: 左边式子就可以决定结果,右边式子不执行
            && : 一假则假
            || : 一真则真
            ! : 取反(没有短路运算,因为只有一个式子)
        2.2 短路规则:
            && : 找假。  左边式子值可以转成false,则无条件返回左边式子的值,右边不执行。 反之无条 
                 件返回右边式子的值。
            || : 找真。 左边式子值可以转成true,则无条件返回左边式子的值,右边不执行。 反之无条件  
                 返回右边式子的值。 
    // 利用逻辑短路原理给函数设置默认值
    
    function get(mun1, mun2) {

      mun1 = mun1 || 1
      mun2 = mun2 || 0

      console.log(mun1 + mun2);
    }

    get(10, 20)

    get(10)

函数返回值

    4.函数返回值 : 函数 传递数据 给调用者
        4.1 传 : 函数
           function 函数名(){ return 值 }
        4.2 收 :  调用者
            let 变量名 = 函数名()
        4.3 注意点
            (1)函数return关键字后面的代码不会执行的
               * 只要有return关键字,函数体立即结束执行。
            (2)如果函数没有return,则默认返回值是undefined
        function get(arr) {
            let sum = 0
            for (let i = 0; i < arr.length; i++) {
                sum += arr[i]
            }
            return sum
        }

        let sum = get([10, 20, 30, 50, 60, 580, 50, 50, 5, 52, 0210, 120, 2, 22, 202, 2])
        console.log(sum)

返回值的4种情况

    无参有返回
    无参无返回
    有参无返回
    有参有返回

作用域

         1.js变量作用域: 变量可以使用的区域
            * 作用:避免变量污染(变量名相同导致代码冲突)
         2.js三种作用域
            2.1 全局作用域(全局变量)  : 在函数外面let的变量
            2.2 局部作用域(局部变量) :   在函数里面let的变量
            2.3 快级作用域(快级变量) :   在分支或循环大括号中let的变量

作用域链

    作用域链: 默认情况下,代码处于全局作用域(0级链),当声明一个函数之后就会开辟一个局部作用域(1级),而函数里面又可以声明一个函数,又会形成新的作用域(2级),以此类推形成的结构称之为作用域链
        
    变量访问规则: 就近原则
        * 当你在一个作用域访问变量的之后,首先会看当前作用域有没有声明。如果有则访问。 没有则往上级作用
        域查找,有没有声明。有则访问,没有则继续往上。直到作用域最顶端0级,如果还没有找到。则程序报错  xxx is 
        not defined

匿名函数

     1.匿名函数 : 没有函数名的函数
     2.匿名函数作用 : 开辟局部作用域,避免全局变量污染
     
     function (){}

匿名函数的调用方式

    //1.0 定义变量
  let get= function (){
    alert('我是匿名函数')
    }
   
   //2.0 自调用
   (function (){
    alert('我是匿名函数')
    })()