Javascript setTimeout导致内存泄漏

Javascript setTimeout导致内存泄漏,javascript,Javascript,这是我在每次点击按钮时使用的功能,一旦10分钟空闲时间结束,它就会打开索引页。但当我尝试从那里登录应用程序时,速度非常慢,应用程序被挂起 我在手机中使用此代码。我只是想知道函数的编写方式是否存在内存泄漏。由于您目前拥有函数,TimeOutObj正在检查它是否存在的同一个函数中声明,它将始终存在,但在您检查它是否为超时id时,它将始终是未定义的,因此您永远不会真正清除超时 通过将大部分SetInteractivityTimeout函数包装在闭包中,可以将TimeOutObj声明在实际处理函数的范围

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


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

由于您目前拥有函数,
TimeOutObj
正在检查它是否存在的同一个函数中声明,它将始终存在,但在您检查它是否为超时id时,它将始终是未定义的,因此您永远不会真正清除超时

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

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);
    }
}

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

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

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);
    }
}

@H2CO3删除错误答案并不能使您正确。你的名声很好,请不要散布虚假信息。所以被很多人使用,并且在很多方面与维基百科类似。保持高标准。请。@H2CO3删除错误答案并不能使您正确。你的名声很好,请不要散布虚假信息。所以被很多人使用,并且在很多方面与维基百科类似。保持高标准。请