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为啥连续调就不准了

js中setInterval()函数只执行一次的原因

在JS脚本中,多个setInterval之间会出现干扰!大概原因是由于从上到下的执行顺序,导致不能同时执行!

js 如何清除setinterval

详解JS中定时器setInterval和setTImeout的this指向问题