闭包就是能够读取其他函数内部变量的函数。## 闭包就是能够读取其他函数内部变量的函数。
闭包常用写法:函数内返回函数。
之前有自己看过js闭包,但仅限于知道他是干嘛的,即js闭包能做到什么,如下:
- 让函数内的变量在函数调用结束后仍然保存在内存中,以便使用。
- 让函数外能够访问到函数内部的变量。
其实上面两点是相同的。
接下来解释为什么会仍然留在内存中
-
每个函数会有相应的执行环境。里面有相应的作用域链。
-
函数在调用时会生成一个活动对象。里面包括函数内的变量及其值。
-
变量的作用域会有一条作用域的链。即函数内能够访问函数外的变量。链的顺序由内函数活动对象到外函数活动对象再到全局变量活动对象。且存的只是引用而不是对象本身。
-
当函数调用结束后会自动销毁局部活动对象。
-
但由闭包写法返回函数内部的函数,而内部的函数有权利访问在它之外的函数活动对象,所以外函数调用结束后不会销毁其活动对象