首页 > 解决方案 > 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();

任何人都可以让我知道结果和简要说明原因吗?

标签: javascript

解决方案


AFAIU,您不能延长 setTimeout 的时间。您可以做的是阻止它执行,并使用新值创建另一个 setTimeout。像这样:

var timer = setTimeout(()=>console.log("first"), 2000);

clearTimeout(timer);

var timer = setTimeout(()=>console.log("second"), 2000);

您不能扩展它,因为计时器是使用变量在创建事件时所具有的值创建的。它不是可以不时评估的参考。它是一个固定值,仅在创建时间进行评估。


推荐阅读