JAVASCRIPT闭包(Closure)(闭:表示封闭,包:表示还存在)
闭包:指一个拥有许多变量和绑定了这些变量的环境表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
闭包是ECMAScript最强大的特性之一。
js对象都有原型(prototype)属性,而原型本身也是对象,也会有原型,这样就形成了原型链。原型链终止与原型为null的对象。Object对象默认有一个null原型(其实就是没有原型,这样说是因为null也是对象),所以原型链会终止于object,即所有对象的基类对象。
原型链(链表)在变量或属性(统称标识符)的查找过程中很有意义,一般会先查找当前执行环境的活动对象,然后会按原型链查找。
闭包实例:
function a(){
var i=0;
function b(){
alert(++i);
}
return b;
}
var c = a();
c();
这段代码中,函数b嵌套在a内部,a会返回b。
执行完c = a()后,实际上c指向了函数b,这样就创建了一个闭包,因为a内的函数b被a外的变量c引用。
也就是函数a的内部函数b被a外的一个变量所引用时,就创建了一个闭包。
在javascript中,如果一个对象不再被引用,也就是没有变量指向它时,就会被GC回收,如果两个对象互相引用,而不再被其他第三者引用,那么这2个对象也会被回收。
但是闭包中,a结束后导致b被c引用,而b同时有引用a,所以a不能被GC回收,这样a内的所有变量就被保持住了,只有b可以调用。
这就是闭包的作用之一。
闭包的作用:
1 保护函数内的变量安全。上例中,函数a内的变量i只有函数b能访问到,而无法通过其它途径访问,因此保护了i的安全性。
2 在内存中保持了一个变量,上例中,函数a的变量i会一直留在内存中,所以相当于被隐藏的全局变量的作用。
分享到:
相关推荐
Closure: the definitive guide, by Michael Bolin
closure-compiler-v20170521.jar,以及一个.chm使用说明:‘Getting Started with the Closure Compiler Application’,‘Advanced Compilation and Externs’,‘Understanding the Restrictions Imposed by the ...
这个存储库包含JavaScript Closure演示。 在我们开始讨论闭包之前,重要的是我们理解以下术语,因为它们将构成我们对闭包的整个理解的基线: 1. 词法范围 词法是指语言或文本。 范围是指与文本相关的属性。 词法...
Closure编译器的纯JavaScript版本,最高级的构建工具
JavaScript Closure 的 Javadoc文档 由于互联网是没有于是自己制作成了.chm格式的
If you're ready to use Closure to build rich web applications with JavaScript, this hands-on guide has precisely what you need to learn this suite of tools in depth. Closure makes it easy for ...
JavaScript闭包(closure).pdf
google 开源的模块化的javascript库。包括丰富的示例和测试。
利用Closure Compiler通过Rollup缩小和优化JavaScript
闭包编译器是一个让javascript下载和运行更快的工具。它是一个真正的javascript编译器。它不是从源语言编译成机器代码,而是从javascript编译成更好的javascript。它解析你的javascript,分析它,删除死代码,重写并...
‘Hello JavaScript Closure!!!’);//妈蛋,E文本来就不好,找翻译才把闭包单词写出来 } fn(); 然后面试官摇摇头说道:“这怎么能叫闭包呢?”,最终两人争执不下,同事果断走人,面试官什么玩意儿?(本故事...
套工具就是提供一个在JavaScript中做模板的机制及函数库,你可以把HTML布局的部份写成一个*.soy,接着再利用...Closure Templates既可以实现JavaScript,又可以实现Java,所以你可以在服务器端和客户端使用相同的模板。
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。
”好吧,我试着向一个27岁的朋友就是JS闭包(JavaScript closure)却彻底失败了。 你们会怎么把它解释给一个充满好奇心的六岁孩子听呢? 注:我看过StackOverflow上给出的示例,但根本没用。 Ali的回答: 当func
理解javascript函数式编程中的闭包(closure)_.docx
Closure Compiler是用来编译JavaScript的编译器,除了像最常见的JavaScript的压缩机提供的功能,它还会对程序进行分析,把不需要的部份移除,减少的JavaScript程序的大小及提升效率。
利用通过最小化和优化JavaScript。 通常,Closure Compiler将产生比其他项目更好的缩小效果,但是从历史上看,它更难以使用。 该插件的目的是减少这种摩擦。 安装 npm install @ampproject/rollup-plugin-closure-...
Closure Compiler exe 根据[在项目中使用Google Closure Compiler](http://www.cnblogs.com/JeffreyZhao/archive/2009/12/09/ikvm-google-closure-compiler.html)
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。很早就接触过闭包这个概念了,但是一直糊里糊涂的,没有能够弄明白JavaScript的闭包到底是什么,有什么用,今天在网上...
javascript Javascript 代码 其中很多都是伪代码的写法,便有回顾和总结。参考资料 包含 javascript 的基础语法 面向对象的实现 ...2. jQuery 中 closure Javascript-Design-Pattern 1. Singleton-Pattern