今天我想总结一下最近学的关于闭包的知识
闭包函数是函数的一种高级应用方式,通过建立一个不被销毁的存储空间来在函数的外部调用和使用函数内部的数据。
1.定义闭包函数
- 定义一个函数a,返回值是一个函数b
- 在返回值函数b中使用函数a定义的局部作用域变量
- 在函数a的外部引用函数a,并且执行返回值函数b
2.闭包函数的特点
- 既是优点也是缺点
①函数作用域空间不会被销毁
优点:空间中的内容永远存在
缺点:占用大量的内存空间
②可以从外部访问函数内部的变量
优点:使用变量数据方便
缺点:容易泄露数据信息
③保护私有作用域变量
优点:确保私有作用于变量一直存在
缺点:占用内存空间 - 闭包函数的最大问题
可能造成占用大量的内存空间,降低程序的执行效率,甚至可能造成数据溢出或者是数据泄露;所以为了保护数据的安全性,特殊情况下才使用闭包。
3.闭包函数的应用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<ul>
<li>我是第一个li</li>
<li>我是第二个li</li>
<li>我是第三个li</li>
<li>我是第四个li</li>
</ul>
<script>
let oLis = document.querySelectorAll('li');
for(var i = 0 ; i <= oLis.length-1 ; i++){
// 闭包的形式
// 会保留执行空间,也就是保留每次生成的i的数值
// 执行点击事件时,可以执行到对应的i的数值
oLis[i].addEventListener('click' , (function(a){
return function(){
console.log(a);
}
})(i+1) )
}
</script>
</body>
</html>