闭包

应用场景

Posted by Lan on July 19, 2020

闭包,应用场景

  1. 模仿块级作用域
eg1:
for(var i=0;i<10;i++>){
    (function(e){
        console.log(e)
    })(i)
}


eg2:
(function(){

    var date=new Date()

})()
//外部不会访问到date

  1. 私有变量
eg0:
函数调用次数,奇数次打印0,偶数次打印1

 function f(){
     var num=0
     function count(){
         num++
         if(num%2===0){
             return 1
         }else{
             return 0
         }
     }
     this.f2=function(){
         return count()
     }
 }
let ff=new f()

console.log(ff.f2())//0
console.log(ff.f2())//1
console.log(ff.f2())//0
eg1:
function persion(name){
    this.getName=function(){
        return name
    }
    this.setName=function(val){
        name=val
    }
}
let per= new persion("jack")
per.getName()//jack
per.setName("rose")
per.getName()//rose




eg2:
function obj(){
    var private=o
    function privateCount(){
        return private
    }

    this.publicMethod=function(){
        private++
        return privateCount()
    }

}


  1. 节流防抖

  2. 函数柯里化

function add(){
    
    var _arg=Array.prototype.slice.call(arguments)
    
    var _result=function(){
        _arg.push(...arguments)
        return _result
    }
    _result.toString=function(){
       return _arg.reduce(function(a,b){return a+b})
    }
    return _result
}
let r=add(1)(2)(3)
console.log(r)