JS 用setTimeout 那本身的函数不就永远不会终止吗

比如functionf(){alert("k");setTimeout(f,1000)}这样一来程序占用的内存不就越来越多吗?... 比如 function f(){
alert("k");

setTimeout(f,1000)
}
这样一来 程序占用的内存不就越来越多吗?
展开
 我来答
帐号已注销
推荐于2018-02-26 · TA获得超过4630个赞
知道大有可为答主
回答量:1345
采纳率:50%
帮助的人:1615万
展开全部

首先,setTimeout是可以取消的,可以不让其永远不终止,方法如下:

var timer = null;
function f(){
    alert("k");
    timer = setTimeout(f,1000);
}
// 在另外一个函数中,在某种条件下,取消之前的定时器
clearTimeout(timer);

这样,timer就不再执行了,也就不会再次调用函数f,生成新的定时器。


其次,关于内存,js类似于java有垃圾回收机制,一些不会再次用到的变量等,会被清理。只要是作用域不逃出函数f的,函数f执行完毕后,js总是有办法将其销毁,当然不一定百分百销毁。这样的话,内存怎么会越来越多呢?只有函数f在执行的时候会多一些,但随即又会被清理的。


最后,即便没有clearTimeout,在浏览器关闭的时候,一切都会消失的。


要提醒的是,如果函数f里在不停的创建对象,而且在函数f执行完毕后,这些对象又是被引用的,确实会有内存被越来越多的占用。

tianlidon
推荐于2016-03-10 · TA获得超过1219个赞
知道小有建树答主
回答量:676
采纳率:85%
帮助的人:103万
展开全部
timeID = setTimeout("timeCount()",1000);//设置定时器的时候取得返回值作为定时器的ID
//当特定的条件触发时,停止定时器
clearTimeout(timeID);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
raycar0524
2013-06-21 · TA获得超过4683个赞
知道小有建树答主
回答量:812
采纳率:0%
帮助的人:621万
展开全部
前两天也解答了一个类似的问题。
从实际来说,没有这样写的,f函数的执行次数以指数形式增加,且没有终结。
从纯研究的角度来说,这个没有全局变量和局部变量,不存在变量占用内存的情况,只将调用函数的指针压入堆栈,堆栈满了就报错了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式