海的那边是海
2016-11-27 23:05
哪位高手能解释下setTimmeout对自身的调用做到循环的,这个不懂啊.
var num = 5;
var i;
function jishi() {
document.getElementById("Time").innerHTML = num;
num--;
i = setTimeout(jishi,1000);
if(num<0) {
window.clearTimeout(i);
window.open("https://123.sogou.com/","_blank");
}
}
window.onload = jishi;
本人也是初学,说的不清楚的话见谅。你看第一轮的时候调用jishi函数,网页显示数字是5,num减为4,使用setTimeout,setTimeout将在1秒后调用jishi函数,num是4>0,if部分不执行,第一轮结束。1秒之后,因为setTimeout对jishi函数的调用,第二轮开始,网页显示数字是4,以此类推。。。直到第六轮,网页显示是0,num减为-1,执行if部分,打开新的页面。
<html>
<head>
<meta charset="UTF-8" />
<title>Document</title>
<!-- <script type="text/javascript" src="jquery-1.11.1.min.js"></script> -->
<!-- <link rel="stylesheet" type="text/css" href="base.css" /> -->
</head>
<body>
<form>
<input type="text" id="count" />
</form>
</div>
</div>
</body>
</html>
<script type="text/javascript">
window.onload=function(){
var num=0;
function startCount() {
document.getElementById('count').value=num;
num=num+1;
setTimeout('startCount()',1000)
// alert(num)
}
startCount()
// setTimeout('startCount()',1000)
}
</script>
你是不是想问这个循环是怎么产生的?
我是这么理解的,因为setTimeout()是包含在这个函数中的,所以函数在1s之后执行的时候会又执行setTimeout(),所以他就会隔一秒又执行这个函数,周而复始循环。
steTimeout(代码,延迟时间),这里要调用之前写的代码,延迟时间是一段时间后继续执行这个函数,举个例子,写一个函数function,内容是num+=1;然后用setTimeout调用就行了
多谢,就是开始没理解函数的自调用,其实这里面settimeout只是延迟了函数调用时间.不过你这回答倒是让我认识了另一个问题,.innerHTML如果在input里的话会不显示,改成div的话可以.input还是用value
JavaScript进阶篇
468195 学习 · 21891 问题
相似问题