闭包(closure)是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数。
闭包的作用
- 可以读取函数内部的局部变量
- 让这些局部变量始终保存在内存中(变量没有被javascript的垃圾回收机制回收)
由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
使用场景
1.如何获得超过一个数据
function foo () {
var num1 = Math.random();
var num2 = Math.random();
return {
num1: function () {
return num1;
},
num2: function () {
return num2;
}
}
}
2.如何完成读取一个数据和修改这个数据
function foo () {
var num = Math.random();
return {
get_num : function () {
return num;
},
set_num: function( value ) {
return num = value;
}
}
}
使用案例
1.属性
var person = function(){
var name = "张三";
this.getName=function(){
return name;
};
};
var p = new person();
alert(p.getName());
2.保存复杂计算中的临时变量
html:
<ul>
<li>aaa</li>
<li>bbb</li>
<li>ccc</li>
<li>ddd</li>
</ul>
点击li的时候,alert各自的内容,比如点击第一个,alert “aaa”
<script type="text/javascript">
var foo = function(){
var liList = document.getElementsByTagName("li"),
i=0,
max = liList.length;
for(;i<max;i++){
(function(index){
liList[index].onclick = function(){
alert(liList[index].innerHTML);
};
})(i);
}
};
foo();
</script>