百度百科定义:闭包就是能够读取其他函数内部变量的函数。
创建闭包的通常方式,是在一个函数内部创建另一个函数
在解释之前,得先讲讲作用域。先来看下面这个示例:
示例中包含了两种作用域,一种是属于全局的全局作用域,另一种是属于函数f的局部作用域。由于Javascript这种链式作用域(父作用域是可以被其子作用域访问的,而子作用域却不能被父作用域访问)的机制,使得示例最后一行输出了undefined
从此可以看出,无法从父作用域中访问子作用域。而我们再来看闭包的定义:闭包就是能够读取其他函数内部变量的函数。也就是闭包可以让我们从父作用域中访问到子作用域,具体怎么实现的呢?来看这个经典的例子
这个示例中,闭包就是函数bar。可以看到,我们通过在函数foo内部定义其子函数bar,并将其作为foo返回值,因为bar函数作用域可以访问foo的作用域,所以实现了从全局作用域访问foo函数作用域的效果。
有了前面知识的充分准备
我们正式进入讲解闭包
想要真正理解闭包,需要理解 执行环境和活动对象
执行环境和活动对象: