闭包的构成 闭包=函数+词法作用域 - 广义上的闭包:
var a=1000; function fn1() { alert(a) } fn1() 狭义上的闭包: 指的就是函数嵌套函数, 子函数引用父函数的相关变量闭包的应用场景和实现: 求和,设置字号,循环表单,封装组件和插件
//循环表单 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()闭包的优缺点: 优:
长期驻留内存,可以缓存数据可以隔离作用域,避免全局污染 缺:长期贮存,会导致内存泄露解决办法:将暴露在外部的闭包变量置为null
更好的解决方案:es6里的let