Javascript关闭和内存问题

时间:2011-04-27 09:06:24

标签: javascript

//Following function add new table entry to table
//and return interface which has function which uses closure to access and update the table
var _newRow  = (function(){
    var _interface = {
        updateName: null,
        updateProgress: null,
        actionLinkButton : null,//<a> tag used for user aciton to perform on UI like delete, hide, show etc.
        ..
        ..
        ..
    };
    var tr = createTr();    
    var tdName = createTd();
    _inteface.updateName = function(newName){
        tdName.innerHTML = newName;
    }
    ..
    ..
    ..
    ..
    ..  
    return _interface;
})(tblObject);

//maintaining the array of all the rows as per row number
rowArray[rowNo] = _newRow;
..
..
//using the row array to update the entries
rowArray[rowNo].updateProgress('read');

以上是我用来更新客户端动态添加的行的模式。我所做的是在向表中添加行时创建_interface,返回它并按行号存储它。

然而,对于这个我使用闭合意味着许多活着的对象。我想知道这是正确的方法吗?这有更好的方法吗?我可以使用哪些分析工具来了解此代码使用了多少内存?如何确保在不需要时正确清除闭包?

1 个答案:

答案 0 :(得分:0)

JavaScript有一个垃圾收集器,它将收集杂散对象并自动为您释放它们。没有办法控制何时或如何。

当有全局可访问的对象引用具有词法范围的函数时,可能会阻止对象/闭包被垃圾回收。确保分离所有不使用的值(例如,从DOM中删除它们)。如果您确定无法访问这些值,那么它们最终将被垃圾收集。

要识别内存泄漏,重要的是不要过早优化,您可以监控Web浏览器的内存使用情况。如果它不明显那么你可能不需要担心它。您可能希望在应用程序中模拟大量操作,以查看应用程序长时间运行后的状态。

但一般情况下,不要担心内存使用情况。根据我的经验,很少有问题。