闭包的简单理解
闭包是函数嵌套,并且内部函数调用了外部函数的变量,从而形成闭包。代码如下:
function fn(){
var name = 'hins'
function fun(){
console.log(name)
}
return fun
}
var f = fn()
f()
闭包的优点:
1、不会污染外部的命名空间
2、延伸变量的作用范围,即当外部函数执行后,内部的变量不会被立即销毁,并且能在外部使用闭包的时候调用它的外部函数的变量,起到变量保护的作用。
缺点:
1、外部函数的变量必须在闭包调用完后才会被回收,所以在被调用之前会占据内存空间,如果没被调用,就会导致内存泄漏。
2、闭包过多,如果没有及时回收变量,就会占据大量内存,影响效率。
解决方案:
1、能不用就不用闭包(这个不现实)
2、将未调用的变量设置为null(这个通常会忘记。。。)
闭包的简单案例,循环点击:点击li输出对应的index
<ul>
<li>hins</li>
<li>sinlando</li>
<li>Gio</li>
</ul>
<script>
var lis = document.querySelectorAll('li')
for (var i = 0; i < lis.length; i++) {
//使用立即执行函数(匿名函数)产生一个小闭包
(function (i) {
lis[i].onclick = function () {
console.log(i)
}
})(i)
}
</script>