setTimeout和setInterval区别 setTimeout模拟setInterval

实际上,setTimeout和setInterval的语法相同。它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码。

不过这两个函数还是有区别的,setInterval在执行完一次代码之后,经过了那个固定的时间间隔,它还会自动重复执行代码,而setTimeout只执行一次那段代码。

setInterval("showTime()"5000);

setTimeout("showTime()"5000);

这两种方法可能看起来非常像,而且显示的结果也会很相似,不过两者的最大区别就是,setTimeout方法不会每隔5秒钟就执行一次showTime函数,它是在每次调用setTimeout后过5秒钟再去执行showTime函数。这意味着如果showTime函数的主体部分需要2秒钟执行完,那么整个函数则要每7秒钟才执行一次。而setInterval却没有被自己所调用的函数所束缚,它只是简单地每隔一定时间就重复执行一次那个函数。

如果要求在每隔一个固定的时间间隔后就精确地执行某动作,那么最好使用setInterval,而如果不想由于连续调用产生互相干扰的问题,尤其是每次函数的调用需要繁重的计算以及很长的处理时间,那么最好使用setTimeout。

现在我们用setTimeout来模拟setInterval,使setInterval调用函数执行完后等待5秒再执行

代码如下:


        function Log(txt) {
            document.getElementById("msg").innerHTML += txt + "<br/>";
        }
        function showTime() {
            var datatime = new Date();
            Log(datatime.toTimeString());

        }

        window.setInterval = function (callback, delay) {
            var obj = arguments.callee;
            if (obj.timeout == undefined) {
                obj.timeout = new Object();
                obj.timeout.called = true;
            }
            function fn() {
                if (obj.timeout.called) {
                    callback();
                    setTimeout(arguments.callee, delay);
                }
            }
            fn();
            return obj.timeout;
        }

        window.clearInterval = function (fn) {
            fn.called = false;
        }

        result = setInterval(showTime, 1000);
        function btnClick() {
            clearInterval(result);
        }

欢迎大家纠正。

你可能感兴趣的:(setTimeout和setInterval区别 setTimeout模拟setInterval)