闭包

闭包定义

闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

闭包是由什么构成
  闭包=函数+词法作用域

  词法作用域:即以变量声明定义的位置为参照,如果当前位置没有定义,就会访问父级定义的位置
广义上闭包:
  var a=1000;
  function fn1() {
     alert(a)
  }
  fn1()
平时工作中用到的闭包狭义上闭包:
  1.函数内嵌套函数
  2.子函数引用了父函数的相关变量

特点:长期驻留内存

闭包应用场景和实现

 //求和
 function makeAdd(x) {
    return function(y) {
     return x+y
   }
}

//设置字号
function setFontSize(size) {
   return function() {
     document.body.style.fontSize=size+"px"
   }
}

//循环表单
function makeHelp(help) {
    
    return function() {
       console.log(help)
        document.querySelector('.help').innerHTML=help
    }
 }
function init() {
    var userInfo=[
        {id:'username',helpText:'请输入用户名'},
        {id:'email',helpText:'请输入邮箱'},
        {id:'address',helpText:'请输入地址'},
    ]
    //动态绑定onfocus事件
    for(var i=0;i<userInfo.length;i++) {
        var item=userInfo[i];
        document.getElementById(item.id).onfocus=makeHelp(item.helpText)
    }
}
init()
//封装组件或插件
var Counter=(function() {

   //私有变量
   var index=0;
   //私有方法
   var add=function() {
       return index++;
   }

   var jian=function() {

   }
   return {
       //暴露出去供用户的方法
       increment:function() {
           add()
       },
       getValue:function() {
           return index;
       }
   }
})()

闭包优点和缺点

  • 长期驻留内存,可以缓存数据
  • 可以隔离作用域,避免全局污染
小知识点

如何回答的一个技术记汇,或你对xxxx的理解
例如:你说一下对闭包的理解

答:

  • xxx是什么

  • ​应用场景

  • ​ 优缺点

  • ​ 具体实现

  • ​ 5.还有没有更好的解决方案!

原文地址:https://www.cnblogs.com/mxnl/p/13604298.html