zoukankan      html  css  js  c++  java
  • 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一文中给了解释.

  • 相关阅读:
    ios 重构笔记
    ios uiwindow笔记
    ios静态库笔记
    ios app提交之前需要哪几个证书
    int、long、long long取值范围
    字节概述
    序列化概述
    LeetCode 最大连续子数列值
    198. LeetCode 打家劫舍
    git自定义关键字
  • 原文地址:https://www.cnblogs.com/zhuji/p/5820751.html
Copyright © 2011-2022 走看看