- 浏览: 1843249 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (665)
- 闲话 (17)
- ruby (1)
- javascript (40)
- linux (7)
- android (22)
- 开发过程 (11)
- 哥也读读源代码 (13)
- JVM (1)
- ant (2)
- Hibernate (3)
- jboss (3)
- web service (17)
- https (4)
- java基础 (17)
- spring (7)
- servlet (3)
- 杂记 (39)
- struts2 (10)
- logback (4)
- 多线程 (2)
- 系统诊断 (9)
- UI (4)
- json (2)
- Java EE (7)
- eclipse相关 (4)
- JMS (1)
- maven (19)
- 版本管理 (7)
- sso (1)
- ci (1)
- 设计 (18)
- 戒烟 (4)
- http (9)
- 计划 (4)
- HTML5 (3)
- chrome extensions (5)
- tomcat源码阅读 (4)
- httpd (5)
- MongoDB (3)
- node (2)
最新评论
-
levin_china:
勾选了,还是找不到
用spring annotation声明的bean,当打包在jar中时,无法被扫描到 -
GGGGeek:
我用的maven-3.5.0,还没有遇到这种情况,使用jar ...
用spring annotation声明的bean,当打包在jar中时,无法被扫描到 -
GGGGeek:
受益匪浅,从组织项目结构,到技术细节,讲的很到位,只是博主不再 ...
一个多maven项目聚合的实例 -
Aaron-Joe-William:
<?xml version="1.0" ...
hibernate逆向工程 -
li272355201:
http://archive.apache.org/dist/ ...
tomcat源码阅读(一)——环境搭建
犀牛书第8章第8节,详细说明了闭包的形成过程。
a function is executed in the scope in which it was defined.
When a function is invoked, a call object is created for it and placed on the scope chain. When the function exits, the call object is removed from the scope chain. When no nested functions are involved, the scope chain is the only reference to the call object. When the object is removed from the chain, there are no more references to it, and it ends up being garbage collected.
But nested functions change the picture. If a nested function is created, the definition of that function refers to the call objects because that call object is the top of the scope chain in which the function was defined. If the nested function is used only within the outer function, however, the only reference to the nested function is in the call object. When the outer function returns, the nested function refers to the call object, and the call object refers to nested function, but there are no other references to either one, and so both objects become available for garbage collection.
Things are different if you save a reference to the nested function in the global scope. You do so by using the nested function as the return value of the outer function or by storing the nested function as the property of some other object. In this case, there is an external reference to the nested function, and the nested function retains its reference to the call object of the outer function. The upshot is that the call object for that one particular invocation of the outer function continues to live, and the names and values of the function arguments and local variables persist in this object. JavaScript code cannot directly access the call object in any way, but the properties it defines are part of the scope chain for any invocation of the nested function.
-------------------------简单总结--------------------------
当嵌套函数被返回,被外部的变量引用,或者作为外部对象的属性时,形成闭包。
形成闭包之后,原本应该已经被垃圾回收的变量,都能继续使用。
a function is executed in the scope in which it was defined.
When a function is invoked, a call object is created for it and placed on the scope chain. When the function exits, the call object is removed from the scope chain. When no nested functions are involved, the scope chain is the only reference to the call object. When the object is removed from the chain, there are no more references to it, and it ends up being garbage collected.
But nested functions change the picture. If a nested function is created, the definition of that function refers to the call objects because that call object is the top of the scope chain in which the function was defined. If the nested function is used only within the outer function, however, the only reference to the nested function is in the call object. When the outer function returns, the nested function refers to the call object, and the call object refers to nested function, but there are no other references to either one, and so both objects become available for garbage collection.
Things are different if you save a reference to the nested function in the global scope. You do so by using the nested function as the return value of the outer function or by storing the nested function as the property of some other object. In this case, there is an external reference to the nested function, and the nested function retains its reference to the call object of the outer function. The upshot is that the call object for that one particular invocation of the outer function continues to live, and the names and values of the function arguments and local variables persist in this object. JavaScript code cannot directly access the call object in any way, but the properties it defines are part of the scope chain for any invocation of the nested function.
-------------------------简单总结--------------------------
当嵌套函数被返回,被外部的变量引用,或者作为外部对象的属性时,形成闭包。
形成闭包之后,原本应该已经被垃圾回收的变量,都能继续使用。
发表评论
-
jQuery1.7.1 API手册
2012-02-21 21:26 1736本文基于jQuery1.7.1版本 ... -
javascript原型链体会
2011-06-14 11:53 1381总结javascript原型链的概念 1. 每个javasc ... -
javascript_core阅读笔记(五)
2011-06-14 10:30 1320本系列内容是阅读javascript_core的笔记,原文见h ... -
javascript_core阅读笔记(四)
2011-06-14 10:20 1084本系列内容是阅读javascript_core的笔记,原文见h ... -
javascript_core阅读笔记(三)
2011-06-09 20:54 1103本系列内容是阅读javascript_core的笔记,原文见h ... -
javascript_core阅读笔记(二)
2011-06-09 20:14 1022本系列内容是阅读javascript_core的笔记,原文见h ... -
javascript_core阅读笔记(一)
2011-06-09 19:36 1219本系列内容是阅读javascript_core的笔记,原文见h ... -
犀牛书第五版读书笔记——Chapter 17. Events and Event Handling(第一部分)
2011-02-21 16:32 14431.用户对页面做操作会 ... -
犀牛书第五版读书笔记——Chapter 16. Cascading Style Sheets and Dynamic HTML
2011-02-21 15:40 15341.浏览器内置有默认的样式表,用户可以用自己的设置来改变默认值 ... -
犀牛书第五版读书笔记——Chapter 15. Scripting Documents(第五部分)
2011-02-16 17:17 127837.document.createElement()和doc ... -
犀牛书第五版读书笔记——Chapter 15. Scripting Documents(第四部分)
2011-02-16 16:43 136827.Node的childNodes属性的 ... -
犀牛书第五版读书笔记——Chapter 15. Scripting Documents(第三部分)
2011-02-16 15:31 158719.HTMLElement元素定义了id,style,tit ... -
犀牛书第五版读书笔记——Chapter 15. Scripting Documents(第二部分)
2011-02-16 14:36 15429.W3C DOM标准扩展并取代 ... -
犀牛书第五版读书笔记——Chapter 15. Scripting Documents(第一部分)
2011-02-16 11:48 11311.document.write()方法只能 ... -
犀牛书第五版读书笔记——Chapter 14. Scripting Browser Windows(第三部分)
2011-02-16 10:19 129721.可以给window和frame指定name属性,这样做的 ... -
犀牛书第五版读书笔记——Chapter 14. Scripting Browser Windows(第二部分)
2011-02-16 10:10 136110.window.close()方法可以关闭窗口,但是只能关 ... -
犀牛书第五版读书笔记——Chapter 14. Scripting Browser Windows(第一部分)
2011-02-15 18:06 13661.客户端javascript提供了setTimeout()和 ... -
犀牛书第五版读书笔记——Chapter 13. JavaScript in Web Browsers(第二部分)
2011-02-15 11:30 160312.当有多个onload事件处理函数注册,浏览器会调用所有的 ... -
犀牛书第五版读书笔记——Chapter 13. JavaScript in Web Browsers(第一部分)
2011-02-15 10:46 14611.在客户端javascript中,D ... -
犀牛书第五版读书笔记——Chapter 10. Modules and Namespaces
2011-02-14 16:47 14731.如果要编写能在多个模块间共享的javascript代码,要 ...
相关推荐
闭包的形成基于三个关键点: 1. **函数嵌套**:一个函数被定义在另一个函数内部。 2. **返回内部函数**:外部函数返回其内部定义的函数。 3. **内部函数引用外部变量**:内部函数需要访问其外部函数的局部变量。 ...
闭包的形成发生在函数内部创建另一个函数时。这个内部函数可以访问到外部函数的变量,即使外部函数已经执行完毕。这是因为内部函数仍然保持着对外部环境的引用,形成了一个“闭合”的状态,即闭包。这种机制使得内部...
2. **闭包与匿名函数**:Python的`lambda`表达式可以创建匿名函数,这些函数也可以形成闭包。例如,`lambda x: x + 1`是一个简单的闭包,它能够记住外部作用域的值。 3. **非局部变量**:使用`nonlocal`关键字可以...
闭包的形成主要有三个要素:内部函数、外部函数和外部函数的作用域链。以下是一些关于JavaScript闭包的关键知识点: 1. **函数嵌套**:闭包最常见的形式是内部函数引用了外部函数的变量。例如: ```javascript ...
4. **对称闭包**:对称闭包是通过添加所有可能的对称对来形成,即如果(x, y)在原关系中,那么(y, x)也加入闭包。这在图论中意味着将所有缺失的对称边添加到图中。 5. **Warshall算法**:Warshall算法是计算传递闭包...
三元闭包意味着通过中间节点,两个未直接连接的节点可以形成间接的连通关系。这种现象在社交网络中很常见,例如,A与B是朋友,B与C是朋友,即使A和C不是直接的朋友,他们通过共同的朋友B形成了社交网络中的联系。 ...
在Python中,当内部函数引用了外部函数的非全局变量时,就形成了闭包。闭包常用于数据封装、延迟计算、状态保存等场景。例如,一个常见的闭包应用是高阶函数,如`map()`、`filter()`和`reduce()`,它们接收一个函数...
闭包的形成基于两个关键概念:作用域链(Scope Chain)和执行上下文(Execution Context)。 1. **作用域链**: - 在每个函数创建时,都会构建一个作用域链,用于存储函数可以访问的所有变量和函数。 - 作用域链...
但是,当一个函数返回另一个函数时,内部函数可以访问外部函数的变量,这就形成了闭包。 闭包的创建通常涉及以下三个要素:内部函数、对外部变量的引用以及外部函数的执行环境。例如: ```javascript function ...
三元闭包是指如果个体A与B有联系,B与C有联系,通常情况下,A与C之间也会形成联系。这种现象在社会学中被广泛讨论,因为它反映了人们倾向于与朋友的朋友建立关系的倾向,以增强社交网络的紧密性。 在数据验证过程中...
- **模块化**:闭包可以作为实现模块化的一种手段,每个模块内部形成一个独立的作用域。 - **延迟计算**:通过闭包,可以将计算过程延迟到需要时再执行,提高程序性能。 - **事件处理**:在事件处理函数中,闭包...
在这个例子中,`inner`函数形成了一个闭包,因为它引用了外部函数`outer`的局部变量`x`。当`outer`返回`inner`并赋值给`closure_example`时,`x`的值被保存,即使`outer`的执行已经完成。 在Java中,你可以使用...
在JavaScript中,每当函数被创建时,都会形成一个闭包,可以保存函数的局部变量。因此,通过闭包,我们可以在不污染全局变量的情况下存储和管理数据。 在ZTree的上下文中,闭包可以用于以下目的: 1. 数据缓存:当...
在JavaScript中,由于函数是一等公民,即函数可以作为参数传递,也可以作为值返回,这为闭包的形成提供了条件。 在给定的文档内容中,我们看到一个示例: ```javascript function a() { var i = 0; function b()...
例如,如果你在循环中使用闭包,它可以捕获每次迭代中的变量值,形成所谓的“闭包循环变量”问题,这是需要注意的一个潜在陷阱。 总的来说,Swift的闭包是强大的工具,它们简化了代码并提升了功能的复用性。通过...
- **闭包的特点**:当一个函数(内部函数)被另一个函数(外部函数)中的变量所引用,并且这个内部函数被外部返回或者保存时,就形成了一个闭包。 通过下面的例子可以更直观地理解闭包的定义: ```javascript ...
在JavaScript中,每当函数被创建时,它都会形成一个闭包,这个闭包包含了函数自身以及在其定义时所处的作用域链。当函数作为返回值或者在异步操作中被保存时,这个闭包就使得函数能够继续访问那些在它外部定义但未在...
这里虽然涉及到了作用域的概念,但由于`$.problemWo`是在IIFE内部定义的,所以并没有形成一个真正的闭包。 #### 更深入的闭包示例 为了更好地理解闭包,我们来看另一个示例: ```javascript (function($) { $....