小编Jin*_*You的帖子

在Dojo类中进行递归setTimeout调用时是否存在内存泄漏?

我们在UI上使用带有时钟的Dojo创建了一个应用程序.但有时应用程序用户界面只是挂起而且时钟刚刚停止.猜测JS引擎刚刚停止,因为时钟是由javascript代码驱动的.

不确定以下代码是否会导致内存泄漏,从而导致挂起问题.我们使用递归setTimeout调用来实现时钟.

dojo.declare("xxx.xxx.HomepageHeader", [dijit._Widget, dijit._Templated],
{
widgetsInTemplate: true,
_time :'',
dateUtil: null,

// ....
// ....

prefix :function (value, p)
{
    return (value < 10) ? p + value : value;
},

updateTime :function ()
{
    var d = new Date();
    var _this = this;
    var t = [_this.prefix(d.getHours(), '0'), _this.prefix(d.getMinutes(), '0'), _this.prefix(d.getSeconds(), '0')].join(':');
    _this._time.innerHTML = t;
    _this.dateInfo.innerHTML = this.dateUtil.format(d, "yyyy/MM/dd") + " &nbsp;|&nbsp " + this.dateUtil.format(d, "EEE");
    window.setTimeout( function(){_this.updateTime();}, 100);
}

// ....
// ....
}
Run Code Online (Sandbox Code Playgroud)

注意到在类中,updateTime方法使用window.setTimeout以递归方式调用自身来更新UI上的时间文本.

这里有任何内存泄漏问题吗?如果答案是否定的,是否有任何问题导致挂断问题?

谢谢!

javascript memory dojo memory-leaks settimeout

6
推荐指数
1
解决办法
2201
查看次数

标签 统计

dojo ×1

javascript ×1

memory ×1

memory-leaks ×1

settimeout ×1