闭包

一 、闭包的概念

闭包其实就是一个可以访问其他函数内部变量的函数,常见的闭包方式就是在一个函数中常见另一个函数,创建的函数可以访问当前函数的局部变量

闭包的实质就是当前环境存在父级作用域的引用,是作用域链的一个特殊应用。

通常情况下,函数的内部变量是无法被外部访问到的,使用闭包,就具备了实现在外部函数访问某个函数内部变量的功能。这些内部变量的是可以始终保持在变量中。

二、闭包的用途

1、使我们在函数的外部访问到函数的内部变量,可以通过闭包,在函数的外部调用闭包函数,来获取函数内部的变量,可以用来创建私有变量。

2、使已经运行结束的函数上下文中的变量对象继续留存在内存中,这个对象不会被回收。

三、原始类型存放的位置

局部、占用空间确定的数据会被存在栈中,否则就在堆中,var声明的全局变量会被挂到[[scope]]的global上,其他关键字的声明会被挂到script上,全局变量会被存放在静态区域

四、内存分区

1、栈区:编译器自动分配,存放函数的局部变量,函数的参数值

2、堆区:一般由程序员分配释放,若程序员不释放,一般程序结束可能由os回收

3、全局区(静态区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量存放在一起的,未初始化的全局变量和静态变量放在相邻的两个区域。程序结束后释放 

4、文字常量区:字符串常量存放在这个区域,程序结束后释放

5、程序代码区:存放函数体的二进制代码

五、闭包的形式

1、返回一个函数

2、在定时器,事件监听,ajax请求 的任何异步中,使用了回调函数,实际上都是在使用闭包。

3、以函数作为参数传递的形式会形成闭包

4、立即执行函数保存了全局作用域和当前函数作用域,形成闭包环境

posted @ 2022-02-18 10:57  大坏坏狼  阅读(120)  评论(0)    收藏  举报