JS每日说1-----闭包

71 阅读1分钟

什么是闭包?原理是什么?如何产生闭包?

-什么是闭包:可以看做桥梁,沟通内外作用域。
-闭包的原理:当前环境存在对父级作用域的引用。
-如何产生闭包:
1.函数返回函数。
2.函数作为参数传递。
  function func1(params){
    return function(){
      console.log(params)
    }
  }
  let test = func1(1)
  setTimeout(test, 1000);

闭包的应用

1.防抖节流
	
2.函数柯里化
    fn(1)(2)(3)
3.单例模式
    function person(name){
        this.name = name
    }

    var getInstance = (function(){
        var instance
        return function(name){  //产生闭包,拥有唯一的instance
            if(!instance) instance = new person(name)
            return instance
        }
    })()

    var person1 = getInstance('zhangsan') 
    var person2 = getInstance('lisi')
    console.log(person1.name); //zhangsan
    console.log(person2.name); //zhangsan
    console.log(person1 === person2);  //true

4.匿名自执行函数
    for (var i = 1; i < 5; i++) {
        (function (i) {
                setTimeout(() => {
                    console.log(i);
                }, 1000)
        })(i)
    }

闭包的缺点

闭包会导致活动变量不被垃圾回收机制销毁,占用更多的内存。
解决:手动设置为null