💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
>[danger] 什么是闭包 ****** 参考: 1.闭包是一个概念, 在ES5中就是一个函数 2.当内层函数调用外层函数中的变量, 会导致外层变量锁在内层函数形成一个引用, 内部函数会保留这个变量, 形成一个闭包 3.常用在循环绑定事件, 并在事件函数触发时使用索引值时, 会因为函数内引用的变量被改变, 而无法拿到每个索引值, 所以我们在事件函数外部加入一层匿名函数来保留每次索引的值 *************** 扩展: 1. 注意在滥用闭包时, 可能造成外层函数使用完, 无法释放的问题. 因为内层函数引用着外部函数的变量, 解决方式可以手动置空引用的变量, 同时声明新变量保存内层要引用的值. 例如: ``` function showId() { var el = document.getElementById("app") el.onclick = function(){ aler(el.id) // 这样会导致闭包引用外层的el,当执行完showId后,el无法释放 } } // 改成下面 function showId() { var el = document.getElementById("app") var id = el.id el.onclick = function(){ aler(id) // 这样会导致闭包引用外层的el,当执行完showId后,el无法释放 } el = null // 主动释放el } ``` 2. 或者干脆使用, ES6的let和const, 块作用域, 解决了只有函数作用域的问题, 而且解决了for里的var 内存溢出的问题