js闭包

<!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可以被累加。

以上理解可能比较粗糙,勿喷!

原文地址:https://www.cnblogs.com/toodeep/p/4472758.html