javascript - setTimeout() 和 setInterval() 本质区别在哪里?
大家讲道理
大家讲道理 2017-04-11 11:41:49
[JavaScript讨论组]
setInterval(function(){
    run();
}, 1000);
function run(){
    setTimeout(function(){
        run();
    }, 1000);
}

run();

我想问一下,在效果上,这两个方法完全一样,但是本质上区别在哪里呢?
补充一下:我想问的是在线程中这两种实现方法有什么不同之处,或者说在队列中的区别。

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(8)
伊谢尔伦
function run(){
    // 其他代码
    setTimeout(function(){
        run();
    }, 10000);
}
run();

以上面的代码来说, 虽然设置的是10s执行一次, 但是实际时间却是需要// 其他代码的执行时间来确定
即setTimeout的间隔时间是, // 其他代码执行时间 + 10s

setInterval(function(){
    run();
}, 10000);

而setInterval, 不会有上面的问题, 但是如果run()的执行时间, 操作大于10s, 那么甚至可能跳过任务

黄舟

setinterval 循环执行 如果包含在一个点击事件中 setinterval设置的是3000也就是三秒,你点击一次加快一次点击一次加快一次,最后飞速的变换。就像汽车一样踩一脚油门加速一次踩一次加速一次
settimeout 执行一次

黄舟

setInterval是循环执行,setTimeout是延迟执行。虽然上面的方式一样,但是第二种方式是递归调用自己。

伊谢尔伦

setInterval 是持续占有独立线程的一个定时触发函数!

嵌套setTimeout,实现的功能和前者一样!但是不会持续占有一个线程的资源,执行完当前的方法,会释放当然的线程资源,等待下次触发,会重新申请资源!

我记得有这么一个区别,不知道有没有记错!

天蓬老师

setInterval是每隔一段时间调用指定函数(N次)
setTimeout是在一段时间后调用指定函数(仅一次)

这区别很明显了吧,虽然你题目中使用setTimeout达到了setInterval的效果,但我觉得是完全多余。

实际写代码的时候,就看你的需求是怎样,针对需求去写对应的代码。


另外,第一个代码写成setInterval(run,1000);也是可以执行的。

阿神

就感官效果来说第一次执行没什么区别。

大家讲道理

就这个功能而言,推荐用内置方法(第一种)

PHP中文网

只执行一次和在一定时间内重复执行。setTimeout时间不是标准的系统时间,是有误差的。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号