0%

js闭包和内存释放

闭包的那些事儿

  • 怎么写一个闭包
    闭包是什么就不解释了,直接写一个闭包函数:

    js中,函数是一等公民,定义一个函数f,它返回另一个可执行函数`function() {

    };`

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

  • 内存回收机制
    为什么上面执行结果不太对,因为执行f()()后,f函数已经执行完毕了,没有其他资源引用f,ta会被立即释放,也就是说,f()()执行完后,立即就释放了。
    如何才不释放呢?

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

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