JavaScript "自"运行-setInertval()和setTimeout()理解
setInterval()和clearInterval()
setInterval()在JS知识导图上属于 JS的 Windows对象方法, 参考www.w3school.com.cn 与我们最常用的alert()方法是"平行"的, 由于Window对象是浏览器全局对象,所以按照JS的编程习惯,window可以不用coding
var result = "Y"; function onOk() { var tid = setInterval(function () { if (result == "Y") { window.location.href=window.location.href; clearInterval(tid); } result = "N"; }, 3000); } //当点击一按钮3秒后,利用setInterval()方法刷新页面
setTimeout()和clearTimeout()
<div class="divSpace" style="text-align: center;"> <input type="submit" name="ctl00$ContentPlaceHolder1$bt" value="下一步" id="ContentPlaceHolder1_bt" class="btnSubmitYellow" /> </div> <script language="javascript" type="text/javascript"> var time = 10; var timeout = null; //用于指引自运行的function的句柄,这里是window.setTimeout(enable_button, 1000); function enable_button() { var bt = document.getElementById("ctl00$ContentPlaceHolder1$bt"); if (time > 0) { bt.value = '还剩余' + time + '秒'; bt.disabled = "true"; time = time - 1; timeout = window.setTimeout(enable_button, 1000); } else { bt.value = '开始测试'; bt.disabled = ""; window.clearTimeout(timeout); } } function window.onload() { enable_button(); } </script>
//倒计时实例
setTimeout()定义
1).它属于JS原生范畴, 和JS的Window(浏览器对象)等平行,参考
2).属于JavaScript计时器,让我们有能力作到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。
setTimeout和setInterval的区别你真的了解吗? 推荐,说到本质了,这篇文章以理解性翻译的形式讲解了setInterval()函数的意义,需要花些时间思考加以理解其中的意味.
Javascript程序都是以单线程的方式运行于浏览器的javascript引擎中的, setTimeout和setInterval的作用只是把我们要执行的代码在我们设定的一个时间点插入js引擎维护的一个代码执行队列中, 时间点待插入的代码不意味着一到时间点就会被立即插入,接着立即执行的,理解这一点很重要.
function click() { // code block1... setTimeout(function() { // process ... }, 200); // code block2 }
3).当点击click事件, JS引擎开始执行code block1,执行setTime,接着执行code block2,到200m后,准备将process插入JS执行队列,如code block2执行超过200ms,按照文章的解释, setTime是不会将process过程插入到JS执行队列,必须等到click处理结束在执行process.
4).原生的setTime是没有循环执行的"味道"的,如果需要让setTime变成循环执行,需要自递归调用.
5).原生的setInterval是有循环执行的"味道"的,即每隔多少时间间隔,会将执行代码插入JS执行队列, 但是会发生插入执行被打断的情况,在setTime一文中给了解释.