zoukankan      html  css  js  c++  java
  • 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局部变量并没有被释放。

     

    实际应用:

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

  • 相关阅读:
    性能测试流程
    N种自动化测试框架(包含自动化和性能,总有一款适合你)
    自动化测试框架:jmeter + maven+ jenkins
    oracle中删除表:drop、delete、truncate
    SpringBoot开发mockserver及生成swagger接口文档
    五步法颈椎病自我按摩图解
    自动化必备:自动化持续集成环境搭建(上):git + maven + jenkins
    玩转jmeter:beanshell必备技能
    EFK-2:ElasticSearch高性能高可用架构
    MySQL5.7之在线DDL不会锁表
  • 原文地址:https://www.cnblogs.com/iyangyuan/p/2801851.html
Copyright © 2011-2022 走看看