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

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

  • 相关阅读:
    SqlServer怎样获取查询语句的成本
    Testcase中Debug 提示
    cmd batch use variable
    主流数据库默认端口
    Usage of doskey
    操作系统shell的比较/Comparison of command shells
    延长windows激活时间
    一道面试题和一个结果.
    注册表操作CMD(reg.exe)
    adb 查看固件版本
  • 原文地址:https://www.cnblogs.com/toodeep/p/4472758.html
Copyright © 2011-2022 走看看