AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

JavaScript闭包你也懂

发布者 snandy   简介 JD前端工程师
主页 http://snandy.cnblogs.com  发布于 1450922171689  浏览 6858 关键词 JavaScript 
分享到

第1页

JavaScript闭包你也懂
 @snandy  2015.12

第2页

内容
闭包关键字
一句话闭包
闭包的3个关键知识点
闭包的深入理解
闭包代码赏析


第3页

闭包关键字
学术
晦涩
抽象
作用域链
函数嵌套
保持状态

第4页

一句话闭包
是 JavaScript 的一个难点但又功能强大,很多高级应用都要依靠它实现。
闭包是 JavaScript 的重要特性,是迈向高级 JavaScript 程序员的必经之路。
虽然不完全懂,或多或少也可以使用它。
闭包以很自然的形式,把我们的目的和所涉及的资源全给自动打包在一起。
闭包是代码块和创建该代码块的上下文中数据的结合。
闭包描述的函数执行过程中动态环境,是运行期的,动态的概念。


第5页

理解闭包的3个关键知识点
作用域链
静态/词法作用域
保持状态

第6页

作用域链
记住:内部函数可以访问到外部函数的变量。

第7页

静态/词法作用域
JavaScript 采用的是静态/词法作用域。
静态/词法作用域:函数在声明的时候就已经保存了其上层的作用域,而非调用的时候动态获取。
函数的外层上下文作用域,在函数声明是就已经确定了,和它在何处调用没有关系。

第8页

保持状态
返回内部函数
内部函数作为外部对象方法

第9页

闭包代码很简单
嵌套函数
内层函数使用外层函数的变量
内存函数引用暴露到外部

第10页

闭包的深入理解
变量对象
激活对象

第11页

变量对象
定义:一个VO[variable object]是关联上下文执行环境的一系列数据。它是与上下文关系密切的一个特殊对象,存储了在上下文中定义的变量和函数声明。

第12页

激活对象
定义:当一个函数被调用时,会创建一个 AO(activation object)。除了包含变量和函数声明外,它还包括参数和一个特殊的 arguments 对象。也可以把 AO 理解为函数上下文的 VO。

第13页

保存的“状态”是…
普通变量声明
函数声明
父级函数的参数
父级函数的 arguments 对象

第14页

闭包用途及代码赏析
实现私有成员
模块化,减少全局变量的污染 
循环代码中正确找到对应元素的索引 
写一个类库,比如jQuery,RequireJS

第15页

实现私有成员

第16页

模块化,减少全局变量的污染 

第17页

循环代码中正确找到对应元素的索引 

第18页

写一个类库,比如jQuery,RequireJS

第19页

资源
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures
https://en.wikipedia.org/wiki/Scope_(computer_science)#Lexical_scoping
https://en.wikipedia.org/wiki/Closure_(computer_programming)
http://stackoverflow.com/questions/111102/how-do-javascript-closures-work
http://jibbering.com/faq/notes/closures/
http://ejohn.org/apps/learn/#49
http://www.cnblogs.com/snandy/archive/2011/03/01/1967628.html




第20页

Thanks.
支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。