函数柯里化

100 阅读1分钟

函数柯里化

  • 将一个 接受 多个参数的函数, 更改成每次只传递一个参数的函数
  • 利用了函数的闭包 延长了 外部函数的使用时间
 //普通函数想要执行 和 
   function fun(c, d){
        return c+ d
     }
     let ser =  fun( 2,3)
     console.log(ser)

// 使用闭包
   function fn (a){
            return function(b){
              return a+b
            }
        }
         const str = fn(2)  //str 当前时一个函数 且固定了第一个参数 的值
         let sum = str(2)  // 我们只要改变第二个参数上做出操作 即可 
         console.log(sum)

//正则在这一块 尤为突出

     function fn(reg){
        return function(str){
         return reg.test(str)
        }
       }
       const ser = fn(/^\d{4,8}$/)
       let marry = ser('123345')
       console.log(marry) //true

封装函数柯里化


       //  https://www.baidu.com:8080/index.html
        //  https://www.baidu.com:8080/a.html

        function fun (a, b, c, d){
          return a + '//' + b + ':' + c + d
        }
    //    let str =  fun('http', 'www.baidu.com', '08', '/index.html')
    //    console.log(str)
       //封装函数柯里化
      
        function fn(origin, ...arr){
            // console.log(origin.length)
            console.log(...arr)
            return function(...Arr){
             Arr = [...arr ,...Arr ]
             console.log(Arr)
             if(Arr.length === origin.length){
                return Arr
                console.log(Arr)
             }else{
                return fn(origin, ...Arr)
                // console.log(fn(origin, ...Arr))
             }
            }
            
        }
        const ser = fn(fun,'http') //fun ==> 相当于 上面的功能函数  origin
        // console.log(ser)
        const ser1 = ser('www.baidu.com', '08' )
        // console.log(ser1)
        const ser2 = ser1('/index.html')
        // console.log(ser2)
 

防抖与节流

防抖:

  • 在一定时间内, 快速触发同一事件 每次重新触发, 都顶掉前一次事件, 以 后一次事件为主

普通函数 执行 防抖

      //  <input class="inp" type="text"> thml 结构
       const inp = document.querySelector('.inp ') 
     let timer = 0
         inp.addEventListener('input', function(e){
              clearTimeout(timer)
               
               timer = setTimeout(function(){
                console.log(`搜索了${e.target.value}`)  
              },300)
         })


自执行函数执行 防抖

    //  <input class="inp" type="text"> thml 结构
    
        const inp = document.querySelector('.inp ')

     inp.oninput =(function(timer){
            return function(e){
                clearTimeout(timer)
              timer =  setTimeout(function(){
                    console.log(`搜索了${e.target.value}`) 
                },300)
             }
        })(0)

节流:

  • 在一定时间内, 快速触发同一事件 在规定时间内, 只能触发一次, 下一次必须等到 规定时间结束以后才能执行

普通函数 执行 节流

     //  <input class="inp" type="text"> thml 结构
    
        const inp = document.querySelector('.inp ')
        准备变量 
        let flag = true
        //添加 表单事件
        inp.oninput = function(e){
            if(flag === false)return
            flag = false
          console.log(`搜索了${e.target.value}`)
         
         setTimeout(()=>{
           flag = true
          },300)
        }

自执行函数执行 节流

        //  <input class="inp" type="text"> thml 结构

      const inp = document.querySelector('.inp ')
      inp.oninput = (function(flag){
            return function(e){

                if(flag === false)return

                flag = false
           console.log(`搜索了${e.target.value}`)
           setTimeout(function(){
               flag = true
           },300)
            }
        })(true)