Javascript引用方法

Javascript引用方法,javascript,dojo,Javascript,Dojo,在我过去的项目中,我曾创建一个javascript应用程序对象,并创建对dom和dijit节点的引用。不久前,我读到这会导致垃圾收集问题,因为js保留对dom的引用(或这些行中的某些内容) 我喜欢我过去做事的方式,就是节点“id”在代码中只被引用一次 那么,还有什么选择呢?每次需要domNode/dijit小部件时都使用dojo.ById()和dijit.ById()?我能想到的唯一可维护的选项是使用小部件/节点ID创建“常量”。您之前所做的工作不会立即出现问题。你确定你了解问题的来源吗?找不到

在我过去的项目中,我曾创建一个javascript应用程序对象,并创建对dom和dijit节点的引用。不久前,我读到这会导致垃圾收集问题,因为js保留对dom的引用(或这些行中的某些内容)

我喜欢我过去做事的方式,就是节点“id”在代码中只被引用一次


那么,还有什么选择呢?每次需要domNode/dijit小部件时都使用dojo.ById()和dijit.ById()?我能想到的唯一可维护的选项是使用小部件/节点ID创建“常量”。

您之前所做的工作不会立即出现问题。你确定你了解问题的来源吗?找不到我读过的原始文章,但这些似乎是指同一个问题。dom循环引用。如果我没记错的话,这主要是ie8或更早版本的问题。触发我查找内存泄漏的是,在开发无限滚动数据网格时,浏览器速度减慢。网格被销毁后内存没有被释放。这对我来说没有任何意义,只是销毁网格时没有正确清除引用。我将网格内的所有引用以及网格本身的所有引用设置为null。那么,您是在使用闭包还是在dom元素上添加expando属性?既然您使用的是dojo,那么它对内部事件侦听器数据等的清理工作是否与jQuery一样好?
app = {
        // UI - divs
    _divMainView : null,
    _divCurrent : null,
    _divTmSelectContianer : null,
    _divSpSelectContianer : null,
    _loadingMsg : null,
    _loadingOverlay : null,

    // tabs
    _tabs : null,
    _tab1 : null,
    _tab2 : null,

    init : function() {     },
    _initUi : function() { 
        dojo.parser.parse();
                this._divMainView = dojo.byId('main');
                this._tab2 = dijit.byId('tab1');
                // wire up events
        },
    _handleEvent : function() {},
    _doSomething : function() {}
}