<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Document</title>
<script type="text/javascript">
window.onload = function(){
/*function aaa(){
var a = 1;
a++;
alert(a);
}
aaa();
aaa();
aaa();*/
var b = (function aaa(){
var a = 1;
return function bbb(){
a++;
alert(a);
}
})();
b();
b();
}
</script>
</head>
<body>
</body>
</html>
闭包其实就是函数嵌套函数,内部函数可以引用外部函数的参数和变量。函数内部的参数和变量在函数调用完成后,他们都会被js的垃圾回收机制所回收,所以上面的代码一开始虽然连续调用三次aaa();但是并不能累加a的值,因为每一次调用完之后,函数内部的a都会被回收,下一次在调用的时候,又重新生成a.但是当函数内部有嵌套了一个函数,并且引用了变量a,b()调用完之后,a并不会被收回,而是会一直存在内存中,所以这种情况下a可以被累加。
以上理解可能比较粗糙,勿喷!
原文:http://www.cnblogs.com/toodeep/p/4472758.html