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

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

  • 相关阅读:
    mac OS 截图方法
    MAC OS上JAVA1.6 升级1.7,以及 maven3.2.1配置
    maven 安装设置方法
    STemWin移植
    uIP使用记录
    define宏定义细节及uCOS中宏定义技巧
    实验室播放视频步骤
    光通信零碎知识
    论文笔记6
    OFDMA
  • 原文地址:https://www.cnblogs.com/toodeep/p/4472758.html
Copyright © 2011-2022 走看看