- 什么是闭包?
- 闭包即闭包函数,当一个函数使用到外部作用域的变量,这个函数就是闭包函数
- 如何产生闭包?
- 函数嵌套函数,内部函数使用到外部函数变量的时候,就会产生闭包
- 闭包的原理
- 其实就是利用了作用域链的特性,作用域链就是在当前执行环境下访问某个变量时,如果不存在就一直向外层寻找,最终找到最外层也就是全局作用域
- 闭包的形式
- 闭包是一个函数,而且存在另一个函数当中
- 闭包可以访问到父级函数的变量,且该函数不会被销毁
- 闭包什么时候产生?
- 外部函数被调用的时候
- 内部函数声明的时候
- 闭包的好处
- 延长局部变量的生命周期
- 模块化,减少全局的污染
- 闭包的缺点
- 由于缓存下来的变量数据还会占用内存,所以会导致内存泄露,内存泄露过多会导致内存溢出,程序会宕机
- 如何解决闭包的副作用?
- 将指向闭包的所有变量全部移除,调用完就赋值为null
- 闭包是根据调用时环境还是创建时环境?
- 例题一
//全局,也就是foo函数的创建时环境 let x = 10; function foo() { console.log(x); } function bar() { //调用时环境 let x = 20; foo(); // 10 也就是说闭包根据的是创建时的函数环境,跟调用环境无关 } bar();- 例题二
function foo() { let x = 10; // 闭包,bar的创建环境 function bar() { return x; } return bar; } let x = 20; // 调用环境 let bar = foo(); // 调用 bar 函数 bar(); // 10,