闭包(2)

闭包是一个重要的 JS 模式,可以私有访问变量

function createGreeter(greeting) {
  return function(name) {
    console.log(greeting + ', ' + name);
  }
}

const sayHello = createGreeter('你好');
sayHello('小邓'); // 你好, 小邓

 

闭包是函数内部和外部联系起来的桥梁,这样函数外部就可以读取函数内部的变量,让这些变量的值一直保存在内存中。

 

由于 JS 的垃圾回收机制,函数执行之后就会立即销毁,然而闭包中,外部函数的变量被内部引用,内部又被函数外部的变量引用,这样当 a 执行之后, outter 函数还是会被销毁, 但是内部函数在执行时会创造一个容器来存放上层引用关系,所以 num 会一直保存在内存中,下次调用 a , num 还是会保存上次执行之后的状态,如果新建一个变量 b ,引用 outter 方法,就会开辟一块新的地址,b 执行时 num 还是初始化的状态, a b 两块地址互不影响。

总结一下就是,闭包找到的是同一地址中父级函数中对应变量最终的值。

 

内存泄漏

1、 当前对象中有内部引用的数据, 那么这个时候,这个数据不删除,保留一根指针给内部活动对象。

2、每次外部函数执行的时候,外部函数的引用地址不同,都会重新创建一个新的地址。

 

posted on 2022-03-02 09:47  zhishiyv  阅读(16)  评论(0编辑  收藏  举报

导航