一直在做vue和小程序,好长时间没有用js高级函数在不复习都快忘完了,下面跟我一起复习一遍闭包的使用
一、什么是闭包
闭包(closure)指的是一个作用域可以访问另一个函数内部的局部变量。
<script>
function du() {
var num = 10
function dun() {
console.log(num)
}
dun()
}
du()
</script>
二、闭包的作用
闭包的主要作用:延伸了变量的作用范围
<script>
function du() {
var num = 10
return function () {
console.log(num);
}
}
var dun = du()
dun()
</scrip
三、闭包的特点
- 让外部访问函数内部变量成为可能
- 局部变量会常驻在内存中
- 可以避免使用全局变量,防止全局变量污染
- 会造成内存泄漏(有一块内存空间被长期占用,而不被释放)
四、小案例
点击li标签输出当前li的索引
<body>
<ul class="nav">
<li>李白</li>
<li>张三</li>
<li>王五</li>
<li>赵六</li>
</ul>
<script>
var list = document.querySelector('.nav').querySelectorAll('li')
for (var i = 0; i < list.length; i++) {
list[i].index = i
list[i].onclick = function () {
console.log(this.index);
}
}
</script>
</body>
总结
闭包就是可以创建一个独立的环境,每个闭包里面的环境都是独立的,并且互不干扰。闭包会发生内存泄漏,每次外部函数执行的时候,外部函数的引用地址不同,都会重新创建一个新的地址。但凡是当前活动对象中有被内部子集引用的数据,那么这个时候,这个数据不删除,保留一根指针给内部活动对象。