A、JS函数编程中,函数表达式是一种非常有用的技术,使用函数表达式可以无须对哈书命名而实现动态编程,匿名函数田也可以称之为拉姆达,函数函数表达式的特点有如下:

1、函数表达式不同于函数声明,函数声明要求要有名字,但是函数表达式不需要,没有名字的函数表达式也叫做匿名函数

2、在无法确定如何阴阳同函数的情况下,递归函数就会变得很复杂

3、递归函数应该始终使用arguments,callee来递归地调用自身,(不要使用函数名——函数名可能会发生变化)


B、当在函数内部定义其他函数时,就创建了闭包,闭包有权访问包含函数内部的所有变量,原理如下:

1、在后台执行环境中,闭包的作用域包含着他自己的作用域、包含函数的作用域和全局作用域

2、函数的作用域及其所有变量都会在函数执行借宿后背销毁,单当函数返回了一个闭包时,这个函数作用域将会一直在内存中保存到闭包不存在为止,使用闭包可以在JS中模仿块级作用域(JS本身没有块级作用域的概念)——创建并立即调用一个函数,这样既可以执行其中的代码,又不会在内存中留下对该函数的引用,结果就是函数内部的所有变量都会被立即销毁——除非将某些变量赋值给了包含作用域(即为外部作用域)中的变量


C、闭包还可以用于在对象中创建私有变量,相关的概念和要点如下:

1、即使在JS中没有正式的私有对象属性的概念,单可以使用闭包来实现公有办法,而通过共有办法可以访问在包含作用域中的定义的变量

2、有权访问私有变量的公有方法叫做特权方法

3、可以使用构造函数模式,原型模式来实现自定义类型的特权方法,也可以使用模块式、增强的模块模式来实现单例的特权方法

D、在JavaScript中的函数表达式和闭包都是有极大有用的特性,利用他们可以实现很多功能,不过因为创建闭包唏嘘维护额外的作用域,当使用过度的时候可能会占用大量内存