JavaScript设计模式与开发实践-第3章-闭包和高阶函数
1、闭包
函数作用域:函数中搜索一个变量是从内到外,内部可以访问外部的变量,外部不可以访问内部的变量
变量生存周期:函数调用结束,局部变量就会被销毁,但是如果使用闭包结构,就可以延长局部变量的生命
闭包的作用:
- 封装变量
- 延长局部变量的寿命
闭包是JavaScript实现面向对象设计的重要一点
闭包与内存管理:闭包的作用域链中保存了一些DOM节点,并产生了循环引用的情况时,会产生内存泄漏,解决的方法是将循环引用的变量设为null
2、闭包与命令模式(编程实现)
命令模式:把请求封装成对象,解除请求发起者和执行者的耦合。预先向命令对象中植入命令的接收者。
3、高阶函数
高阶函数的特征:
- 可以作为参数传递(回调函数、异步请求)
- 可以作为返回值return(实现isType,getSingle)
高阶函数实现AOP,实现函数after和before方法(编程实现)
高阶函数其他应用:
- 函数currying化:currying的函数会接受参数,不立刻求值,而是用闭包保存。待真正需要求值的时候,一次性求值(编程实现)
- 函数uncurrying化 :可以将某些对象的方法独立出来使用,例如Array.prototype.push。和上面的currying关系不大(编程实现)
- 函数节流:将要执行的函数延迟一段时间执行(编程实现)
- 分时函数:让创建节点的工作分批进行(编程实现)
- 惰性加载函数:第一使用addEvent以后会重写这个函数(编程实现)
浙公网安备 33010602011771号