# 此页面贡献者:年轻的小铲

什么是闭包

闭包是由函数以及其词法作用域组成的。

闭包原理

可以参考作用域链、[[scope]]、词法作用域一节。

由于执行一个函数的时候,他会创建一个上下文环境,确定当前的作用域链(当前函数内的变量对象+及这个函数定义时就确定了的[[scope]]),而这个[[scope]]储存的就是定义函数时,这个函数所处于的作用域,也就是词法作用域。因此在执行一个闭包的时候,对闭包内的变量的解析,是去查找这个闭包的上下文环境,也就是闭包内的变量对象,和他词法作用域中的变量对象。所以尽管闭包外层的函数执行完,但是闭包内还能访问到外层函数的变量。

闭包的应用

用闭包模拟私有方法:有利于限制对代码的访问,还提供了管理全局命名空间的强大能力,避免非核心的方法弄乱了代码的公共接口部分;封装变量:避免添加太多的全局变量和函数,污染全局环境,减少命名冲突。

学习资料

MDN - closures

上次更新: 7/29/2018, 12:21:27 PM