一、首先,定义 函数有两种方式
一种是函数声明,一种是函数表达式。
1、函数声明
语法:


如图,由于变量提升,这个语句会引发意想不到的错误。
2、函数表达式



3、一点在运用匿名函数的时候的小提示

二、递归
1、

arguments.callee 是一个指向正在执行的函数的指针 2、

三、闭包
1、




2、闭包与变量(这个比较重要) 2.1


2.2


在匿名函数内部,又创建并返回了一个访问num的闭包,这样一来,rresult数组中的m每个函数都有z自己num变量的一个副本,因此就可以返回各自不同的数值了。
四、关于this
1、

2、 来看一个例子


内部函数在搜索这两个变量时,只会搜索到其活动对象为止,因此永远不可能直接访问外部函数中的这两个变量。
解决方法:把外部作用域中的this对象保存在一个闭包能够访问的变量里,就可以让闭包访问该对象了。



3、内存泄漏

闭包会引用包含函数的整个活动对象。(重要!)
而其中包含着 element,即使闭包不直接引用element,包含函数的活动对象中也仍然会保存一个引用。
五、模仿块级作用域
1、


2、关于匿名函数的解释


3、关于临时创建一些需要的变量,就可以使用私有作用域。(很重要!)

在匿名函数中定义的任何变量,都会在执行结束时被销毁,因此,变量i只能在循环中使用,使用后被销毁。
而在私有作用域中能够访问变量count,是因为这个匿名函数是一个闭包,他能够访问包含作用域中的所有变量。

六、私有变量
1、介绍

2、特权方法

3、静态私有变量 (1)


创建了全局的构造函数。 创建了全局的变量,myobject。
(2)



在这个状态下,变量name变成了一个静态的、由所有实例共享的属性。
以这种方式创建私有变量会因为使用原型而增进代码复用,但每个实例都没有自己的私有变量。
七、模块模式
六种的模式是用于为自定义类型创建私有变量和特权方法的。
而模块模式则是为单例创建私有变量和特权方法的。
所谓单例,指的就是只有一个实例的对象。






简言之,如果必须创建一个对象并以某些数据对其进行初始化,同时还要公开一些能够访问这些私有数据的方法,那么它就可以使用模块模式。
八、增强的模块模式




