javascript - setTimeout导致内存泄漏

标签 javascript

var SetInactivityTimeOut = function () {
    try {
        var TimeoutInterval = parseInt(10, 10);

        var PreviousTimeStamp = Math.round(new Date().getHours() * 60 + new Date().getMinutes());

        if (TimeoutInterval === 0) return;

        TimeoutInterval = TimeoutInterval * 60 * 1000; //Converting to milisecond
        var TimeOutObj;
        if (TimeOutObj != null && TimeOutObj != undefined) {
            clearTimeout(TimeOutObj);
        }
        //Ti.API.info('TimeOutObj---'+TimeOutObj);
        TimeOutObj = setTimeout(function () {
            open the main page
        },TimeoutInterval);

    } catch (e) {
        error(e);
    }
}

这是我在每次单击按钮时使用的功能,一旦 10 分钟空闲时间结束,它就会重新打开索引页面。但是当我尝试从那里登录应用程序时,速度非常慢并且应用程序被挂起。

我在移动设备中使用此代码。我只是想知道函数的编写方式是否存在内存泄漏。

最佳答案

由于您目前拥有函数,所以 TimeOutObj 是在您检查它是否存在的同一函数中声明的,它将始终存在,但始终是 未定义 code> 在您检查是否是超时 ID 的地方,因此您永远不会真正清除超时。

通过将 SetInteractivityTimeout 函数的大部分内容包装在闭包中,您可以在实际处理函数的范围之外声明 TimeOutObj,因此它将保持其值每次调用 SetInactivityTimeout 函数时。

var SetInactivityTimeOut = (function () {
   var TimeOutObj;
   var TimeoutInterval = 10 * 60 * 1000; //Converting to milisecond

   return function() {
     if (TimeOutObj) {
       clearTimeout(TimeOutObj);
     }

     TimeOutObj = setTimeout(function () {
       // open the main page
     }, TimeoutInterval);
   }
 }());

关于javascript - setTimeout导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14278153/

相关文章:

javascript - 随机数数组优化

javascript - JQPLOT条形图范围

javascript - Vue : How to build bundle for Nuxt with vue-cli-service?

javascript - 如何将样式应用于使用 .insertAdjacentHtml 方法创建的元素

javascript - 使用 LoopBacks HasManyThrough 设置连接模型中的自定义属性

javascript - typescript :为什么不将 'this' 视为 Javascript?

javascript - jQuery 图片悬停效果

javascript - Highcharts 和 EXTJS 3 : Labels in x axis overlap

javascript - 设置高度 div javascript

javascript - 使用javascript将值相乘,结果显示在下拉列表中