我們使用Dojo在UI上創建了一個使用時鐘的應用程序。但是有時應用程序用戶界面只是掛在那裏,時鐘剛剛停止。猜測JS引擎剛剛停止,因爲時鐘是由JavaScript代碼驅動的。在Dojo類中進行遞歸調用setTimeout時是否有內存泄漏?
不確定下面的代碼會導致內存泄漏,然後導致掛斷問題。我們使用遞歸的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") + " |  " + this.dateUtil.format(d, "EEE");
window.setTimeout(function(){_this.updateTime();}, 100);
}
// ....
// ....
}
注意到在類中,方法updateTime使用了window.setTimeout來遞歸地調用它自己來更新UI上的時間文本。
這裏是否有任何內存泄漏問題?如果答案是否定的,是否有任何可能的問題導致掛斷問題?
謝謝!