• 1. 主讲人:赵兵 日 期:2013.06.23 远光软件股份有限公司JavaScript(匿名函数)
  • 2. 匿名函数的应用递归 闭包 模仿块级作用域 私有变量
  • 3. 匿名函数匿名函数:没有名字的函数。(lambda)函数 区别:匿名函数在代码执行到那一行才有定义。
  • 4. 递归递归函数:函数通过名字调用自身。 arguments.callee:指向正在执行的函数的指针。
  • 5. 闭包闭包:是指有权访问另一个函数作用域中变量的函数。 外部函数中的变量propertyName被内部函数访问。
  • 6. 理解作用域链 创建compare函数时:创建一个预先包含全局变量对象的作用域链,被保存在内部的[[Scope]]属性中。 调用compare函数时:为函数创建一个活动对象,并被推入执行环境作用域链的前端。(函数执行完毕后,会被销毁)
  • 7. 理解作用域链10resultcomparethiswindowundefinedvalue1argumentsthiswindow[5, 10]5value210compare[[Scope]]Scope ChainGlobal ScopeCompare Scope全局变量对象本地活动对象
  • 8. 闭包的作用域链createFunction[[Scope]][[Scope]]10Scope Chain21Scope Chain(anonymous)0resultthiswindowundefinedGlobal ScopepropertyNameargumentsthiswindow[“name”]“name”createFunction Scopeobject1argumentsthiswindow[]undefined(anonymous)Scopeobject2undefinedcreateFunction
  • 9. 闭包的作用域链// 解除对匿名函数的引用(以便释放内存) compareNames = null;
  • 10. 闭包与变量
  • 11. 闭包与变量
  • 12. this对象
  • 13. this对象
  • 14. 模仿块级作用域JavaScript没有块级作用域的概念。
  • 15. 模仿块级作用域匿名函数模仿块级作用域。
  • 16. 私有变量任何在函数中定义的变量,都可以认为是私有变量。 缺点:每个实例都会创建同样一组新方法。
  • 17. 静态私有变量区别:私有作用域中定义由实例共享的私有变量或函数,且特权方法定义于原型之上。
  • 18. 模块模式模块模式:为单例创建私有变量和特权方法。 单例:只有一个实例的对象。 JavaScript以对象字面量的方式来创建单例对象:
  • 19. 模块模式模块模式通过为单例添加私有变量和特权方法能够使其得到增强。
  • 20. 模块模式这种模式在需要对单例进行某些初始化,同时又需要维护其私有变量时是非常有用的。
  • 21. 增强的模块模式这种模式适合单例必须是某种类型的实例。
  • 22. 谢 谢 !
  • 23. 版权声明 远光软件股份有限公司拥有本套模版的版权及最终解释权,没有远光软件股份有限公司的特别许可,任何人不能以任何形式或为任何目的复制或传播本文档的任何部分。本文档中包含的信息如有更改,恕不另行通知。 由远光软件股份有限公司所销售的某些软件产品包含有其它软件供应商版权所有的软件组件。 Microsoft®、WINDOWS®、NT®、EXCEL®、Word®、PowerPoint®和SQLServer®是微软公司的注册商标。 IBM®、DB2®、DB2通用数据库、OS/2®、ParallelSysplex®、MVS/ESA、AIX®、S/390®、AS/400®、OS/390®、OS/400®、iSeries、pSeries、xSeries、zSeries、z/OS、AFP、IntelligentMiner、WebSphere®、Netfinity®、Tivoli®、Informix和Informix®动态ServerTM是IBM公司在美国或其他公司的商标。 ORACLE®是ORACLE公司的注册商标。 UNIX®、X/Open®、OSF/1®和Motif®是OpenGroup的注册商标。 本文档提到的所有其它产品和服务名称是它们各自公司的商标。