zoukankan      html  css  js  c++  java
  • 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可以被累加。

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

  • 相关阅读:
    【BZOJ】3052: [wc2013]糖果公园
    【BZOJ】3757: 苹果树
    【BZOJ】1086: [SCOI2005]王室联邦
    【POJ】3648 Wedding
    【POJ】3678 Katu Puzzle
    【POJ】2296 Map Labeler
    【POJ】3207 Ikki's Story IV
    【HDU】1814 Peaceful Commission
    【HDU】2829 Lawrence
    【HDU】3480 Division
  • 原文地址:https://www.cnblogs.com/toodeep/p/4472758.html
Copyright © 2011-2022 走看看