js 中 setInterval的执行次数问题

<scripttype="text/javascript">vartimeDao=100;functiondao(){divD.innerText=timeDao;if(... <script type="text/javascript">
var timeDao=100;
function dao()
{
divD.innerText=timeDao;
if(timeDao==0)
{
return;
sh.close;
}
timeDao--;
var sh;

sh=setInterval("dao()",1000);
}
</script>
<div id="divD" onclick="dao()">sdfa</div>

当我单击一次!它的数字跳法是从100-->99-->97-->93-->85-->69-->37-->0
不是每秒自减1!!!!!!
我要的是1秒减1
展开
 我来答
DeadlYBlinder
2019-06-26 · TA获得超过132个赞
知道小有建树答主
回答量:137
采纳率:0%
帮助的人:64.7万
展开全部

虽然是老问题了,但是好像没看到有人解释一下为什么出错,上来给大家补一个

setInterval被包含在Interval所调用的函数里了,这就意味着每次循环,都会再启动一个Interval

也就是说,第一次的循环

timeDao--;

计数100 - 1 = 99

并且添加一个新的循环 (当前有 2 个循环进程)

第二次循环

99 - 1 = 98

98 - 1 = 97

并且两个现有循环各添加一个新的循环(当前有 4 个循环进程)

第三次循环

97 - 1 = 96

96 - 1 = 95

95 - 1 = 94

94 - 1 = 93

... (不用再往下写了,相信已经说明了问题)

以下为修改代码:

<script type="text/javascript">
var sh = null;  // 时钟对象
var timeDao = 100;  // 计数器

// FUNCTION :: dao ()
// 计数递减函数
function dao () {
    divD.innerText = timeDao;
    if(timeDao == 0) {
        if (sh != null) clearInterval(sh);
        sh = null;
        return;
    }
    timeDao--;
}

// FUNCTION :: startsh ()
// 启动计时器
function startsh () {
    sh = setInterval("dao()", 1000);
}
</script>
<div id="divD" onclick="startsh()">sdfa</div>
笑壹個
推荐于2016-07-03 · TA获得超过403个赞
知道小有建树答主
回答量:311
采纳率:0%
帮助的人:227万
展开全部
<script type="text/javascript">
var timeDao=100;
var sh = null;
function dao()
{
divD.innerText=timeDao;
if(timeDao==0)
{
return;
sh.close;
}
timeDao--;
if(sh==null)sh=setInterval("dao()",1000);
}
</script>
<div id="divD" onclick="dao()">sdfa</div>
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
畅贺拨朋2Y
2011-09-01 · 超过10用户采纳过TA的回答
知道答主
回答量:28
采纳率:0%
帮助的人:23.6万
展开全部
应该这样子就好了
<script type="text/javascript">
var timeDao=100;
var i=1;
function dao()
{
divD.innerText=timeDao;
if(timeDao==0)
{
return;
sh.close;
}

timeDao=timeDao-i>0?timeDao-i:0;
i=i*2;
var sh;

sh=setInterval("dao()",1000);
}
</script>
<div id="divD" onclick="dao()">sdfa</div>
追问
没好~~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式