闭包是什么
闭包是一个函数加上到创建函数的作用域链接,闭包”关闭“了函数的自由变量
function fun() {
var a = 10;
return function () {
console.log(a);
}
}
fun()()
闭包的优点
1、内部函数可以访问到外部函数的局部变量
2、 闭包可以解决一下问题:
// 不适用闭包,点击列表后,弹框展示的都是 4
var lis = document.getElementsByTagName('li');
for (var index = 0; index < lis.length; index++) {
// (function(index) {
// lis[index].onclick = function() {
// alert(index);
// }
// })(index)
lis[index].onclick = function() {
alert(index)
}
}
//使用闭包
<!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>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<script type="text/javascript">
var lis = document.getElementsByTagName('li');
for (var index = 0; index < lis.length; index++) {
(function(index) {
lis[index].onclick = function() {
alert(index);
}
})(index)
}
</script>
</body>
</html>
闭包的缺点
1、 变量会驻留在内存中,造成内存损耗问题
2、内存泄露,只存在于较低版本的ie浏览器中