函数柯理化

1.函数柯理化

大函数返回小函数

思想:利用闭包的机制(保存),将一些内容提前存储和处理,在某个阶段之后拿来用即可

 

2.应用

2.1 预处理内容返回一个代理函数

 /*
    * bind预先处理内容
    *   @params:
    *       func:要执行的函数
    *       context:要改变的this指向
    *       args:要给函数传递的参数
    *   @return
    *       返回一个代理函数
    * */
 const bind = function (fn,context,...args){
      return function proxy(){
           fn.call(context,...args)
      }
}

2.2 dom点击事件

const obj = {
    x:1000
}
function fn1(y){
     this.x += y
     alert(this.x)
}
// dom绑定事件 - 原生bind实现
btn.onclick = fn1.bind(obj,300)

// dom绑定事件 - call实现
btn.onclick = function (){
     fn1.call(obj,300)
}

// dom绑定事件 - bind预处理方式实现
btn.onclick = bind(fn1,obj,300)

2.3 定时器

// 定时器 - call处理
setTimeout(()=>{
      fn1.call(obj,300)
},3000)

// 定时器 - bind预处理方式实现
setTimeout(bind(fn1,obj,300),3000)

3. bind重写

~ function (proto){
    function bind(context,...outArgs){
         let _this = this
         return function proxy(...innerArgs){
              _this.call(context,...[...outArgs,...innerArgs])
         }
    }
}(Function.prototype)

  

上一篇:call,apply,bind的理解


下一篇:第 38 题:apply、call 和 bind 是什么?哪些区别?