`
wsql
  • 浏览: 11777207 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

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局部变量并没有被释放。

实际应用:

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


分享到:
评论

相关推荐

    JavaScript闭包(closure).pdf

    JavaScript闭包(closure).pdf

    理解javascript函数式编程中的闭包(closure)_.docx

    理解javascript函数式编程中的闭包(closure)_.docx

    javascript闭包详解中文word版

    资源名称:javascript闭包详解 中文word版   内容简介: Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态语言C/C 的程序员来说是一个新的...

    javascript 闭包

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。

    JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解

    很早就接触过闭包这个概念了,但是一直糊里糊涂的,没有能够弄明白JavaScript的闭包到底是什么,有什么用,今天在网上看到了一篇讲JavaScript闭包的文章(原文链接),讲得非常好,这下算是彻底明白了JavaScript的闭包...

    JavaScript闭包

    Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态...本文将以例子入手来介绍Javascript闭包的语言特性,并结合一点 ECMAScript语言规范来使读者可以更深入的理解闭包。

    javascript闭包(Closure)用法实例简析

    本文实例讲述了javascript闭包(Closure)用法。分享给大家供大家参考,具体如下: closure被翻译成“闭包”,感觉这东西被包装的太学术化。下面参考书本和网上资源简单探讨一下(理解不当之处务请留意)。 1、什么是...

    JS闭包经典

    闭包一点即通 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。

    闭包编译器:用于Google Closure编译器的Ruby包装器

    闭包编译器(作为Ruby Gem) 闭合编译器gem是用于... require 'rubygems'require 'closure-compiler'Closure::Compiler.new.compile(File.open('underscore.js', 'r'))=&gt; "(function(){var j=this,m=j._;function i(a

    理解javascript函数式编程中的闭包(closure)

    主要帮助大家理解javascript函数式编程中的闭包(closure)概念,通俗地讲, JavaScript 中每个的函数都是一个闭包,感兴趣的小伙伴们可以参考一下

    Javascript闭包(Closure)详解

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。

    学习Javascript闭包(Closure)知识

    主要介绍了学习Javascript闭包(Closure)知识的相关资料,需要的朋友可以参考下

    javascript中闭包(Closure)详解

    闭包(closure)是Javascript语言的一个...小编之前一直糊里糊涂的,没有能够弄明白JavaScript的闭包到底是什么,有什么用,本文把自己的理解些出来分享一下,希望不理解JavaScript闭包的朋友们看了之后能够理解闭包!

    JavaScript中的闭包(Closure)详细介绍

    主要介绍了JavaScript中的闭包(Closure)详细介绍,函数调用对象与变量的作用域链、什么是闭包等内容,并给出了实例,需要的朋友可以参考下

    JavaScript闭包原理与用法学习笔记

    本文实例讲述了JavaScript闭包原理与用法。分享给大家供大家参考,具体如下: 闭包(Closure) 闭包是一个函数和词法环境的组合,函数声明在这个词法环境中。 词法作用域: 看下面的一个例子: function init() { ...

    closure-builder:基于NPM的Closure构建系统可轻松将Soy模板文件与Closure JavaScript文件一起编译,而无需进行任何配置

    编译闭包样式表(.gss)文件编译JavaScript文件编译Node.js文件编译汇总文件(实验性) 编译css文件复制资源复制远程资源将Markdown(.md)转换为.html文件最佳实践发展免责声明作者执照 安装使用NPM并使用npm ...

Global site tag (gtag.js) - Google Analytics