一、闭包的概念
闭包是指一个函数能够访问其函数外部作用域中的变量。
JavaScript闭包是函数内部的子函数能读取局部变量
二、闭包的特点
- 函数里面嵌套函数
- 内部函数能访问外部函数的变量
- 定义的参数和变量不会回收
三、JavaScript闭包的前提
- 先明白什么是全局变量和局部变量
- JavaScript中声明变量格式:var(关键字)+变量名(标识符)。
全局变量:
- 不在函数function内部用var关键字声明如:
var text; var text=10; - 在函数function内部没有使用var关键字声明却直接赋值如:
function show(){
text=10;
}
局部变量:在函数function内部使用var关键字声明并赋值如:
function show(){
var text=10;
}
四、JavaScript闭包的用途
简单举1个小例子
创作一个列表鼠标点击时使其一行背景色变为红色,点击另一行时上次点击的变为原样。
首先创造列表
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
使用JavaScript闭包,先取出所有的li,然后用for循环找到一个个li并用function函数封装并给其添加样式,在函数内部for循环清除上一次点击的背景色。
<script type="text/javascript">
var lilist=document.getElementsByTagName('li');
// 取出所有的li
for (var i=0;i<lilist.length;i++){
lilist[i].onclick=(function(i){
return function(){
console.log(i);
for(var j = 0; j < lilist.length; j++) {
lilist[j].style.backgroundColor = "";
}
this.style.backgroundColor="red";
}
})(i);
}
</script>
由上面可以看出闭包的两个用途:一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
五、JavaScript闭包的缺点及其使用建议
闭包有一个严重的缺点:内存浪费问题。不仅仅因为它常驻内存,更主要的是,对闭包的使用不当会造成无效内存的产生。
建议:在退出函数之前,将不使用的局部变量全部删除。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。