我们逐步解析这段代码的每个部分,以帮助你更清晰地理解其功能和结构。 1. 全局变量let 任务进行中 = true;
CopyInsert - 作用:这个变量用于控制两个任务的执行状态。初始设为
true ,表示任务可以继续执行。
2. 任务一function 任务一() {
console.log("准备执行任务一");
setTimeout(function 执行任务一() {
if (!任务进行中) return;
console.log("任务一执行");
setTimeout(执行任务一, 5000);
}, 5000);
}
CopyInsert - 准备执行:首先打印出准备执行任务一的日志。
- 定时器:使用
setTimeout 创建一个定时器,设定 5 秒后执行内部的匿名函数(执行任务一 )。 - 状态检查:在内部函数中首先检查
任务进行中 的状态,如果为 false ,则不再执行后续的代码,直接返回。 - 执行任务:如果状态允许,打印 “任务一执行” 的日志,并再次调用
setTimeout ,使任务一每 5 秒执行一次。
3. 任务二function 任务二() {
console.log("准备执行任务二");
setTimeout(function 执行任务二() {
if (!任务进行中) return;
console.log("任务二执行");
setTimeout(执行任务二, 5000);
}, 5000);
}
CopyInsert - 逻辑与任务一相同:该函数的结构和任务一类似,只是函数体中的日志和调用不同,表示执行任务二。
4. 倒计时函数function 倒计时(seconds) {
const countdown = setInterval(function() {
if (seconds > 0) {
console.log(seconds);
seconds--;
} else {
clearInterval(countdown);
任务进行中 = false;
console.log("已到12:58,停止所有任务。");
}
}, 1000);
}
CopyInsert - 定时器:使用
setInterval 创建一个每秒执行一次的计时器。 - 打印倒计时:如果
seconds 大于 0,打印当前的秒数,并减少秒数。 - 停止任务:当秒数减到 0 时,使用
clearInterval 停止倒计时,并将 任务进行中 变量设置为 false ,以停止所有正在执行的任务,同时打印停止任务的消息。
5. 检查停止时间函数function 检查停止时间() {
const now = new Date();
if (now.getHours() === 13 && now.getMinutes() === 4) {
倒计时(5);
}
}
CopyInsert - 获取当前时间:创建一个新的
Date 对象以获取当前时间。 - 检查条件:检查当前时间是否为 13:04。如果是,则调用
倒计时 函数,开始倒计时 5 秒。
6. 启动任务任务一();
任务二();
CopyInsert - 调用任务:直接调用
任务一() 和 任务二() ,开始这两个定时任务。
7. 定时检查setInterval(检查停止时间, 60000);
CopyInsert - 频率:使用
setInterval 每 60 秒执行一次 检查停止时间 函数,检查当前时间是否达到了停止条件。
总结- 该代码实现了两个任务,每 5 秒执行一次并持续监控时间。
- 如果时间到达特定点(13:04),将开始 5 秒的倒计时,倒计时结束后停止所有任务。
- 可以通过修改时间检测函数中的条件,调整任务停止的时间。
|