3 回答
TA贡献1893条经验 获得超10个赞
结果是,计时器将在900000毫秒标记处执行,尽管您尝试1200000通过更改timerVal变量的值将其更改为毫秒。
这是因为在JavaScript中它是按值传递的,并且由于您是900000最初传递的,因此计时器已在队列中排队,900000因此无法通过timerVal再次更改变量的值来更改。
因此,这段代码只是timerVal指向新数字,1200000而并没有真正更改先前设置的超时:
function change(){
setTimeout(function(){
timerVal = 1200000; //timerVal reference is pointing to a new number
}, 60000);
}
要真正改变计时器的行为,您需要使用setTimeout调用返回的ID清除超时,并使用新的超时值创建另一个超时。
let timerVal = 9000;
function myFunction() {
return setTimeout(function(){ alert("Hello"); }, timerVal); //returning the id
}
function change(id, newVal){
clearTimeout(id); //clearing the previous timer using the id
setTimeout(function(){ alert("Hello"); }, newVal);
}
let id = myFunction();
change(id, 5000);
TA贡献2021条经验 获得超8个赞
AFAIU,您不能延长setTimeout的时间。您可以做的是阻止它执行,并使用新值创建另一个setTimeout。像这样:
var timer = setTimeout(()=>console.log("first"), 2000);
clearTimeout(timer);
var timer = setTimeout(()=>console.log("second"), 2000);
您无法扩展它,因为使用创建事件时变量具有的值来创建计时器。它不是可以不时评估的参考。这是一个固定值,仅在创建时评估。
添加回答
举报