• JavaScript学习总结二:js闭包(Closure)概念


    闭包的两个特点:

    1、作为一个函数变量的一个引用,当函数返回时,其处于激活状态。

    2、一个闭包就是当一个函数返回时,一个没有释放资源的栈区。

     

    概念描述(个人理解仅供参考):

    当一个函数嵌套中又嵌套了其他的函数时,我们可以把它们叫做外层函数和内嵌函数。内嵌函数可以访问外层函数中定义的变量(局部变量)。假设内嵌函数用到了外层函数的变量,如果我们又把内嵌函数做为外层函数的返回值,让外界可以通过外层函数得到内嵌函数的引用,这时闭包就形成了。外界通过外层函数得到内嵌函数的引用之后,外层函数的职责就完成了,在传统语言中,这时会释放外层函数中定义的局部变量,但是在JavaScript闭包中不会!内嵌函数会锁定外层函数中的局部变量,直到外界对内嵌函数引用结束,才释放变量。闭包之所以能够实现根本是因为JavaScript是解释执行的,它会扫描整个代码,只要外界用到了内嵌函数,内嵌函数用到的外层函数的变量就不会释放,直到内嵌函数引用结束。说了这么多概念很抽象,再来个例子+完美注释就什么都明白了!

    <script type="text/javascript">
    	function fun1() //fun1就是上边讲的外层函数
    	{
    		var str = "我爱中国";
    		return function (){alert(str);};//定义一个匿名内嵌函数(我为了方便才匿名的),这个匿名函数
    		//用到了外层函数fun1的变量str,然后把str打印出来。注意return,这个匿名函数是fun1的返回值
    	}
    	var fun2 = fun1();//fun2就是上边讲的外界(函数),在这fun2引用了fun1中的匿名函数
    	alert("外层函数执行完毕!");
    	fun2();//执行fun2,实际上就是执行内嵌的匿名函数
    </script>

    这个例子输出的结果是:“外层函数执行完毕!”、“我爱中国”。证明了fun1中的str局部变量并没有被释放。

     

    实际应用:

    由于我也是初学,还不知道闭包这个东东有什么用。。。。举不出实际应用的例子,不能再研究了,再研究就要挨骂了。。。但是应该有这么个环节,占个位吧!

  • 相关阅读:
    继承ViewGroup:重写onMeasure方法和onLayout方法
    Eclipse插件的四种安装方法
    android 多条短信息发出后的状态怎样判断
    关闭windows的自动更新
    有的放矢,用好软件开发的目标管理
    安卓打包之数字签名
    PHP+jQuery实现Ajax分页效果:jPaginate插件的应用
    使用SqlDataReader获取输出参数
    ServU服务器中文乱码问题的解决
    VPS虚拟主机与VM虚拟主机对比
  • 原文地址:https://www.cnblogs.com/iyangyuan/p/2801851.html
Copyright © 2020-2023  润新知