闭包(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、每次外部函数执行的时候,外部函数的引用地址不同,都会重新创建一个新的地址。
未完,待续......