🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### 闭包产生的条件 1. 函数嵌套 2. 内部函数引用了外部函数内的变量(变量/函数) #### 闭包在实际开发中的使用场景 1. 将函数做为另一个函数的返回值 2. 将函数的形参作为实参传递给另一个函数调用 ``` function fn1() { var num = 10 function fn2(){ console.log(num) } return fn2 } var fn = fn1() ``` ``` function fn1(msg, time) { setTimeout( function(){ console.log(msg) }, time) } fn1('Jack learning') ``` #### 闭包的作用 1. 使用函数内部的变量在函数执行完后,仍然存活在内存中(延长了局部变量的生命周期) 2. 让函数外部可以操作(读写)到函数内部的数据(变量/函数) 3. 在函数外部能否操作函数内部的变量?不能,但是通过闭包可以实现操作函数内部的变量 4. 函数执行完毕后,函数内部声明的变量是否还存在?一般是不存在,存在于闭包中的变量才可能存在 #### 闭包的缺点及解决方案 1. 函数运行完毕后不能及时销毁,占用内存时间长,容易造成内存泄露 2. 使用完后即时清理,避免过多的未清除变量占用内存 #### 内存泄露 1. 内存泄露积累过多就容易造成内存溢出 2. 占用的内存没有及时释放 3. 开发中常见的内存泄露 1. 闭包 2. 占用内存很大的全局变量 3. 没有及时清理的计时器/定时器 #### 内存溢出 1. 当程序运行需要的内存超过了系统所分配的内存时,就会抛出内存溢出的错误