gpt4 book ai didi

javascript - 为什么我的数字时钟功能会泄漏内存?

转载 作者:行者123 更新时间:2023-11-28 00:17:11 25 4
gpt4 key购买 nike

我有一个数字时钟函数,它从 JSON 结果中获取小时、分钟和秒,将它们解析为整数,对它们进行数学计算(如果秒为 0,则每次循环时将秒加 1,分钟加 1 等)。经过数学计算后,我将这三个变量解析为字符串,这样我就可以用前导 0 填充它们,得到如下所示的结果

10:05:34(小时、分钟、秒)。

我使用此方法而不是日期时间,因为 JS 总是会以本地时间解析日期时间,但这三个变量是基于服务器时间的。

function countTime(){
timeSeconds = parseInt(timeSeconds);
timeMinutes = parseInt(timeMinutes);
timeHours = parseInt(timeHours);

timeSeconds = (timeSeconds + 1);
if (timeSeconds == 60){timeMinutes = (timeMinutes + 1); timeSeconds = 0;};
if (timeMinutes == 60){timeHours = (timeHours + 1); timeMinutes = 0;};

//convert from 24 to 12 hour time, and "0" hour to 12
if (timeHours > 12){
timeHours = (timeHours - 12)
};
if (timeHours == 0){
timeHours = 12;
};

//back to strings so that 0s can be padded
timeSeconds = timeSeconds.toString();
timeMinutes = timeMinutes.toString();
timeHours = timeHours.toString();

//pad 0s
if (timeSeconds <= 10 && timeSeconds.length < 2)(timeSeconds = ("0" + timeSeconds));
if (timeMinutes <= 10 && timeMinutes.length < 2)(timeMinutes = ("0" + timeMinutes));
if (timeHours <= 10 && timeHours.length < 2)(timeHours = ("0" + timeHours));

//show time
timetext = timeHours + ":" + timeMinutes + ":" + timeSeconds
$('#BT').html(timetext);
};

这个函数调用它来设置它的间隔:

function updateTime() {
countTime();
timeInt = setInterval(countTime,1000);
console.log('updated time from server');
};

timeInt 之前已全局初始化,因此我可以清除窗口焦点事件上的该间隔。当我从我的页面中删除这个函数时,我的内存使用量约为 20kb,这仍然相当确定。包含此函数后,内存使用量开始约为 40kb,并且每秒都在增加(我认为这表明存在内存泄漏......)。 updateTime 以非标准间隔调用(大约每 45 分钟一次,通过获取 timeHourstimeMinutes 的 AJAX 调用的成功回调来调用>timeSeconds。我有范围问题吗?当我有 countTime 间隔时,我是否不必要地重新定义变量?

最佳答案

您正在泄漏间隔计时器。您需要在再次初始化之前调用clearInterval

function updateTime() {
countTime();
clearInterval(timeInt); // Here
timeInt = setInterval(countTime,1000);
console.log('updated time from server');
};

关于javascript - 为什么我的数字时钟功能会泄漏内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30349930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com