javascript - setTimeout 定时器值可以扩展
问题描述
嗨,我认识的每个人都问这个问题是基本的和愚蠢的,但这个问题让我感到厌烦。如果我有以下代码。
var timerVal = 900000
function myFunction() {
setTimeout(function(){ alert("Hello"); }, timerVal);
}
myFunction()
根据上面的代码,警报将在 15 分钟时出现。但是十分钟后,我想通过将 timerVal 的值更改为 1200000 来将其延长 5 分钟。现在警报会在再过 10 分钟后出现。即警报将在 20 分钟后或完成后 15 分钟后出现。假设代码是这样的:
var timerVal = 900000
function myFunction() {
setTimeout(function(){ alert("Hello"); }, timerVal);
}
function change(){
setTimeout(function(){
timerVal = 1200000;
},60000);
}
myFunction();
change();
任何人都可以让我知道结果和简要说明原因吗?
解决方案
AFAIU,您不能延长 setTimeout 的时间。您可以做的是阻止它执行,并使用新值创建另一个 setTimeout。像这样:
var timer = setTimeout(()=>console.log("first"), 2000);
clearTimeout(timer);
var timer = setTimeout(()=>console.log("second"), 2000);
您不能扩展它,因为计时器是使用变量在创建事件时所具有的值创建的。它不是可以不时评估的参考。它是一个固定值,仅在创建时间进行评估。
推荐阅读
- pytorch - 在 pytorch 强化学习中更改输入类型的问题
- linux - 如何独立于扬声器控制键盘上的静音 LED
- ios - 如何使用 iOS 共享扩展将 pdf 文件从电子邮件/iOS 设备共享到 iOS 应用程序?
- logic - Logic Audio:如何从延音踏板数据创建一个锁定拨动开关
- javascript - 如何从浏览器打开机器上的 Outlook 客户端以添加日历事件?
- database - spatialite coverter.exe updateTableTriggers() 错误
- r - 在 r 中的特定字符之后删除变量中的所有字符
- ldap - Alfresco LDAP 批量同步
- rust - Rocket - 在我的守卫中使用状态失败,因为未实现特征
- c# - Xamarin Forms - iOS 上的轮播问题