js 中 setInterval的执行次数问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 中 setInterval的执行次数问题相关的知识,希望对你有一定的参考价值。
<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
虽然是老问题了,但是好像没看到有人解释一下为什么出错,上来给大家补一个
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> 参考技术A <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>本回答被提问者采纳 参考技术B 应该这样子就好了
<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>追问
没好~~~~
js中setInterval()函数只执行一次的原因
参考技术A 原因分析产生这个问题是因为我们对js函数理解不透彻导致的:
1,show():这样写表示函数执行后的结果
2,show:这样写表示函数的定义
因setInterval()要接收一个函数的定义而非结果,故改正为:
以上是关于js 中 setInterval的执行次数问题的主要内容,如果未能解决你的问题,请参考以下文章
js里面setInterval和setTimeout相同点和区别
settimeout和setInterval为啥连续调就不准了