回调函数

104 阅读2分钟

回调函数

  • 把 函数 A 通过参数的形式 传递给 函数B, 在函数B 内部以形参的方式调用 函数 A就叫叫做 函数 B 的 回调函数
  • 通常用在 异步代码的封装时 最为常 见
 // 函数 A 
 function A (){
    console.log('很好, 你呢?')
 }

 //函数 B
 function B (hei){
     console.log('你今天好吗?')
     hei()  //此时就是在 函数 B 内部 调用 函数 A
 }

// 执行调用 函数 B(A) 且传递 实参 函数A
   B(A)

 // 那么 此时 函数 A 就是 函数 B 的 回调函数

异步代码 封装 回调函数案例二


    //封装异步代码
        function fu(lose, win) {
            //设置随机数 (生成  0~1 向下取整 * 3000 0 ~ 2700 ) + 1500 
            const timer = Math.floor(Math.random() * 3000) + 1500
            // 设置延时器 
            setTimeout(() => {
            // 判断 随机生成的延时器时间 timer> 3000 毫秒时 表示链接失败 调用函数 fun 打印
                if (timer > 3000) {
                   lose()
              // 判断 随机生成的延时器时间 timer> 3000 毫秒时 表示链接成功 调用函数 fun1 打印
                } else {
                    win()
                }
            }, timer)
        }
      // 函数 fun 和 fun1 
        function fun() {
            console.log('网络申请失败, 请重新申请')
        }
        function fun1() {
            console.log('申请成功, 欢迎访问')
        }

      // 调用函数 fn 传递 实参 fun  和  fun1  对应 形参 lose(失败) 和 win(成功))
       fu(fun ,fun1)
  
      // 此处 也可以 使用 箭头函数 书写 这样写 就删除上面的 fun 和 fun1

      fn(
        /**
         *  fn( 
         *   实参1
         *   , 
         *   实参2
         * )
         *  为了理解方便带上 函数 名 不然可以 不写 因为
         *  函数 调用 时 实参  和 形参 时 一一对应 的 
        */
    
        fun()=>{
           console.log('网络申请失败, 请重新申请')   
           fn(
             fun()=>{
            console.log('第二次网络申请失败, 请重新申请')
               fn(
                fun()=>{
                 console.log('第三次网络申请失败, 请重新申请')
                },
                fun1()=>{
                    console.log('第三次申请成功, 欢迎访问')
                }
               )
             },
             fun1()=>{
               console.log('第二次申请成功, 欢迎访问')
             }
           )
        },
        fun1()=>{
             console.log('申请成功, 欢迎访问')
        }
      )