关于闭包

72 阅读1分钟

关于闭包

对于闭包的含义 : 我认为是在一个函数的内部定义一个函数可以访问外面函数的变量,在外部函数执行完毕之后,内部函数仍对这些数据保持访问的能力,内部函数引用了外部函数的数据,这些数据就存在一个名为闭包的结构当中。

来看看代码

function outer() {
var outerVar = 'I am outer';
  function inner() { 
   console.log(outerVar); } 
    return inner; // 返回内部函数 } 
var closureFn = outer(); // 调用外部函数,得到内部函数的引用 
closureFn(); // 输出 'I am outer'

在示例中,内部函数 inner 引用了外部函数 outer 中的变量 outerVar。即使在外部函数 outer 执行完毕后,仍然可以通过闭包访问到 outerVar 的值。

我认为它的作用就是 : 可以实现数据私有化,数据缓存和延迟执行

如何解决闭包带来的一些问题呢 闭包并非内存泄漏的罪魁祸首

外部的函数执行完毕后内部的数据没有被垃圾回收机制个消掉,这就形成了内存泄漏。会导致内存占用,白白浪费一些内存资源

1.解除引用,就是使用给内部函数赋值的方式,给它设置一个null就OK了

2.IIFF方法,:使用立即执行函数表达式(IIFE)可以在创建闭包时立即执行该函数,并且可以避免不必要的持久化引用。例如

function outer() {
var outerVar = 'I am outer'; 
return (function() {
console.log(outerVar); 
})(); // 使用立即执行函数表达式
} outer(); // 输出 'I am outer'