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

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

  • 相关阅读:
    查缺补漏中~~
    The number of divisors(约数) about Humble Numbers
    Octorber 21st
    素数回文
    盐水的故事
    居然因为交换错了好几把。。。。,还有坑点是num1可以大于num2
    税收与补贴问题(洛谷1023)
    斐波拉契高精度(洛谷1255)
    高精度模板
    Codeforces#373 Div2
  • 原文地址:https://www.cnblogs.com/toodeep/p/4472758.html
Copyright © 2011-2022 走看看