在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
首先看一个内存释放的实例: <SCRIPT LANGUAGE="JavaScript"> <!-- strTest = "1"; for ( var i = 0; i < 25; i ++ ) { strTest += strTest; } alert(strTest); delete strTest; CollectGarbage(); //--> </SCRIPT> CollectGarbage,是IE的一个特有属性,用于释放内存的,使用方法应该是,将该变量或引用对象,设置为null或delete,然后在进行释放动作,在做CollectGarbage前,要必需清楚的两个必备条件: - 一个对象在其生存的上下文环境之外,即会失效。 //--------------------------------------------------------- // JavaScript对象何时失效 //--------------------------------------------------------- function testObject() { var _obj1 = new Object(); } function testObject2() { var _obj2 = new Object(); return _obj2; } // 示例1 testObject(); // 示例2 testObject2() // 示例3 var obj3 = testObject2(); obj3 = null; // 示例4 var obj4 = testObject2(); var arr = [obj4]; obj3 = null; arr = []; 在这四个示例中: - “示例1”在函数testObject()中构造了_obj1,但是在函数退出时, - “示例2”中,testObject2()中也构造了一个对象_obj2并传出,因 - “示例3”中,testObject2()构造的_obj2被外部的变量obj3持用了, - 与示例3相同的原因,“示例4”中的_obj2会在“arr=[]”这行代码 但是,对象的“失效”并不等会“释放”。在JavaScript运行环境的内部,没 在前面的Excel操作示例代码中,对象的所有者,也就是"EXCEL.EXE"这个进程 ——有些人说这是JavaScript或者COM机制的BUG。其实不是,这是OS、IE Microsoft公开了解决这种问题的策略:主动调用内存回收过程。 在(微软的)JScript中提供了一个CollectGarbage()过程(通常简称GC过程), 在上例中调用GC过程的代码是: //--------------------------------------------------------- // 处理ActiveX Object时,GC过程的标准调用方式 //--------------------------------------------------------- function writeXLS() { //(略...) excel.Quit(); excel = null; setTimeout(CollectGarbage, 1); } 第一行代码调用excel.Quit()方法来使得excel进程中止并退出,这时由于JavaScript 第二行代码使excel为null,以清除对象引用,从而使对象“失效”。然而由于 第三行代码使用setTimeout()来调用CollectGarbage函数,时间间隔设为'1',只 GC过程的使用,在使用了ActiveX Object的JS环境中很有效。一些潜在的ActiveX 事实上,即使使用GC过程,前面提到的excel问题仍然不会被完全解决。因为IE还 //--------------------------------------------------------- // 处理ActiveX Object时采用的页面切换代码 //--------------------------------------------------------- function writeXLS() { //(略...) excel.Quit(); excel = null; // 下面代码用于解决IE call Excel的一个BUG, MSDN中提供的方法: // setTimeout(CollectGarbage, 1); // 由于不能清除(或同步)网页的受信任状态, 所以将导致SaveAs()等方法在 // 下次调用时无效. location.reload(); } delete 运算符在手册上的说明 引用 从对象中删除一个属性,或从数组中删除一个元素。 delete expression expression 参数是一个有效的 JScript 表达式,通常是一个属性名或数组元素。 说明 如果 expression 的结果是一个对象,且在 expression 中指定的属性存在,而该对象又不允许它被删除,则返回 false。 在所有其他情况下,返回 true。 最后之最后,关于GC的一个补充说明:在IE窗体被最小化时,IE将会主动调用一次CollectGarbage()函数。这使得IE窗口在最小化之后,内存占用会有明显改善。 到此这篇关于JavaScript CollectGarbage函数案例详解的文章就介绍到这了,更多相关js CollectGarbage函数内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论