闭包
一 、闭包的概念
闭包其实就是一个可以访问其他函数内部变量的函数,常见的闭包方式就是在一个函数中常见另一个函数,创建的函数可以访问当前函数的局部变量
闭包的实质就是当前环境存在父级作用域的引用,是作用域链的一个特殊应用。
通常情况下,函数的内部变量是无法被外部访问到的,使用闭包,就具备了实现在外部函数访问某个函数内部变量的功能。这些内部变量的是可以始终保持在变量中。
二、闭包的用途
1、使我们在函数的外部访问到函数的内部变量,可以通过闭包,在函数的外部调用闭包函数,来获取函数内部的变量,可以用来创建私有变量。
2、使已经运行结束的函数上下文中的变量对象继续留存在内存中,这个对象不会被回收。
三、原始类型存放的位置
局部、占用空间确定的数据会被存在栈中,否则就在堆中,var声明的全局变量会被挂到[[scope]]的global上,其他关键字的声明会被挂到script上,全局变量会被存放在静态区域
四、内存分区
1、栈区:编译器自动分配,存放函数的局部变量,函数的参数值
2、堆区:一般由程序员分配释放,若程序员不释放,一般程序结束可能由os回收
3、全局区(静态区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量存放在一起的,未初始化的全局变量和静态变量放在相邻的两个区域。程序结束后释放
4、文字常量区:字符串常量存放在这个区域,程序结束后释放
5、程序代码区:存放函数体的二进制代码
五、闭包的形式
1、返回一个函数
2、在定时器,事件监听,ajax请求 的任何异步中,使用了回调函数,实际上都是在使用闭包。
3、以函数作为参数传递的形式会形成闭包
4、立即执行函数保存了全局作用域和当前函数作用域,形成闭包环境

浙公网安备 33010602011771号