Javascript setTimeout函数中的变量don';我不能不停地工作

Javascript setTimeout函数中的变量don';我不能不停地工作,javascript,function,variables,settimeout,Javascript,Function,Variables,Settimeout,我的问题是,我的带有SetTimeout函数的循环确实可以工作,但我需要它每隔50毫秒从另一个变量中减去一个变量,但它只能工作一次。这是我的密码: <label for="customRange1">Weighting <output id="amount1" name="amount1" for="rangeInput1">100</output>%</label> <input type="

我的问题是,我的带有SetTimeout函数的循环确实可以工作,但我需要它每隔50毫秒从另一个变量中减去一个变量,但它只能工作一次。这是我的密码:

<label for="customRange1">Weighting <output id="amount1" name="amount1" for="rangeInput1">100</output>%</label>
                        <input type="range" id="customRange1" name="rangeInput1" class="custom-range" min="0" max="100" value="100"
                               oninput="this.form.amount1.value=this.value">
<p id="display"></p>

如果您希望执行间隔,则不应使用
setTimeout
,而应使用
setInterval

setInterval
函数的工作方式与
setTimeout
相同,它需要回调和毫秒数。它还返回一个interval对象,当将其传递给
clearInterval
函数时,该对象可用于停止interval

您的代码不起作用,因为您从未更改
weightingall
的值。所以你每次都会得到相同的数量

在这里,我已经为您的代码生成了一个工作原型。请注意,我已经删除了一些东西,以使其正常工作。你不能简单地复制并粘贴到你的代码中,期望每件事都能正常工作

var权重all=100;
let interval=setInterval(()=>{
var权重1=10;
//我们每次删除10个。
weightingall=weightingall-weighting1;
document.getElementById(“display”).innerHTML=weightingall;
//如果weightingall变量降为0,则清除间隔。
如果(加权所有这可能会有帮助吗

let计数器=100;
函数倒计时(){
console.log(计数器--)
如果(计数器>=0){setTimeout(倒计时,50)}
}

倒计时
什么是
test5
什么是
outputvalue1
,为什么
inputmax
从不读取?脚本中似乎缺少很多内容…在大多数情况下
setTimeout
setInterval
更安全-即使您需要间隔-但这取决于用例。@Ben这是真的。我认为在c中是安全的ase,但是我们不太了解OP的上下文,所以我可能错了。谢谢,但是当我使用文本框中显示为NaN的代码时…我编辑了我的帖子以发布更多我正在使用的代码。很抱歉,我在创建我的post@fafa_60_从您添加的代码中可以得到,您无法访问变量
outputvalue1,因为它是使用
var
input1
函数中定义的。您应该阅读我提供的关于变量范围的链接。这可能是您的问题。
 function input1(ev) {
     function1();
    var outputvalue1 = document.getElementById('amount1').value;
}
document.getElementById('customRange1').addEventListener('input', input1);



var weightingall = 100;
function function1(){
     var weighting1 = outputvalue1;
     var inputmax = weightingall - weighting1;
    document.getElementById("display").innerHTML = test5;
    setTimeout(function1, 50);
}

function1();