JS中setInterval和setTimeout的区别

萌新首发~~记录自己的学习心得,希望高手指出不足的地方

首先免不了先看两者的基本定义与用法:

  1.setInterval的基本语法:

setInterval(code,millisec[,"lang"])
 
参数 描述
code 必需。要调用的函数或要执行的代码串。(若是函数,则只需要写函数名,可以不加双引号和括号)
millisec 必需。周期性执行或调用 code 之间的时间间隔,以毫秒计。

2.setTimeout的基本语法:

setTimeout(code,millisec)
参数 描述
code 必需。要调用的函数后要执行的 JavaScript 代码串。(若是函数,则只需要写函数名,可以不加双引号和括号)
millisec 必需。在执行代码前需等待的毫秒数。

乍一看,感觉这两个区别可大了去了。最主要的就是功能不同:setInterval实现的是根据给定的时间间隔,每隔一段时间调用一次函数或执行一次代码。而setTimeout实现的是根据给定的时间,在经过该时间之后只调用一次函数或执行一次代码。那么有什么必要要区分这两个方法呢?举一个例子来感受一下实际应用中两者有多么的相似。

【例子】浏览器实现钟表功能(每一毫秒更新一次显示的数值)

(1)利用setInterval实现

<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title> 计时器 </title>
    <script type="text/javascript">
        function clock(){
            var time=new Date();
            time=time.getHours()+":"+time.getMinutes()+":"+time.getSeconds()+":"+time.getMilliseconds();
            document.getElementById("clock").value=time;
        }
        setInterval(clock,1);
    </script>
</head>
<body>
<div align="center">
    <input type="textarea" id="clock"/>
</div>
</body>
</html>

(2)利用setTimeout实现:

<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title> 计时器 </title>
    <script type="text/javascript">
        function clock(){
            var time=new Date();
            time=time.getHours()+":"+time.getMinutes()+":"+time.getSeconds()+":"+time.getMilliseconds();
            document.getElementById("clock").value=time;
            setTimeout(clock,1);
        }
        setTimeout(clock,1);
    </script>
</head>
<body>
<div align="center">
    <input type="textarea" id="clock"/>
</div>
</body>
</html>
※在本例中,我们甚至可以把第二个setTimeout用setInterval替换。

※一般而言,如果当前使用方法所属对象是当前宿主顶级对象window,则可以直接写方法,而不用写宿主。如本例也可以写成window.setTimeout()

两者实现的效果都一致,如下图所示:


虽然前面我们认为两者差别特别大,但在本例的题设条件下,似乎两者都能解决问题。所以,是不是大家会对在具体情况中这两者到底有什么区别产生了疑问呢?以下是笔者站在巨人的肩膀上之后得到的结论:

setTimeout代码执行条件是等待上一条代码执行结束并等待你设定好的时间之后再执行

setInterval不会等待上一条代码执行结束,而是完全按照你设定的时间间隔执行

所以当你需要对间隔时间精确地控制时,采用setInterval会更合适。另外也没有什么太大的差别,都可以用。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值