利用垃圾回收机制优化闭包

    技术2024-09-27  66

    前言

    这里涉及JS中的内存 作用域 预编译

    闭包在堆内存中的存在方式

    function foo(){ var a = 0; return function(){ ++a } } var obj = foo(); console.log(obj()); var obj1 = foo(); console.log(obj1()); var objA = foo(); console.log(objA());

    当你每使用调用闭包的时候 浏览器运行内存中都会创建一个新的AO对象 因为闭包的特点 AO对象并不会被销毁 依旧会占用 浏览器运行内存的空间

    真正的公司业务的时候 由于闭包不会污染全局变量的特性 不可避免的会使用一些闭包

    当闭包多了起来之后 ,内存空间由于闭包不会被销毁 ,在js解析执行之后 浏览器 的可用空间会减少 ,当js要处理较为复杂的情况 超过浏览器的当前运行内存 就会造成内存泄漏 (尤其是低版本IE浏览器,运存小,一旦泄漏立马崩溃)

    这里提供两种的最简单也是最直接的方式来清除闭包引用

    function foo(){ var res = 0; return function(){ console.log(++res) } } var aaa = foo(); aaa(); aaa(); //这里最简单的方式就是 aaa = null; // 在你闭包使用完成后 清除该函数的引用 var aoo = (function(){ var arr = 1; return function(){ console.log(++arr) } })() aoo(); aoo(); //由于立即执行函数的特性 执行完一次就自行消失 //可以做到释放内存的作用
    Processed: 0.010, SQL: 9