程序之路每天一个编程知识点

2019-03-25 js闭包和内存释放

2019-03-25  本文已影响0人  zlx_2017

闭包的那些事儿

  var f = function() {
    var num = 0;
    return function() {
      return num += 1;
    };
  }

js中,函数是一等公民,定义一个函数f,它返回另一个可执行函数function() { return num += 1; };

js中的作用域,都是一层一层向上找的,在f内部函数里面,他的num向上找到父函数的作用域。
现在,我们执行一下:

f()()
// 1
f()()
// 1
????? 感觉 不太对?为什么num没有自增呢??
// 创建f的引用
var fn = f();
fn()
// 1
fn()
// 2
fn()
// 3

这下就对了,num成了私有变量,f拥有了私有作用域。

完了吗?
f有了fn的引用,内存一直得不到释放,咋办呢?这样的函数多了是不是会造成内存溢出?
手动释放一下:

var fn = f();
fn()
// 1
fn()
// 2
fn()
// 3
// 手动释放f的引用
fn = null
// f的引用fn被释放了,现在f的作用域也被释放了。num再次归零了。
var fn = f()
fn()
// 1
上一篇 下一篇

猜你喜欢

热点阅读