当循环条件为假时脚本执行不会停止

Script execution doesn't stop when loop condition is false

最近我写了一个用户脚本,用于在 csgojustice 上进行自动投注。这是:

var delay = 10000
var btBet = document.getElementById("make-bet");
var loop = true
var input=document.createElement("input");
input.type="button";
input.value="Start";
input.onclick = start;
input.setAttribute("style", "font-size:18px;position:absolute;top:120px;right:40px;");
document.body.appendChild(input); 

var input=document.createElement("input");
input.type="button";
input.value="Stop";
input.onclick = stop;
input.setAttribute("style", "font-size:18px;position:absolute;top:120px;right:130px;");
document.body.appendChild(input); 

function start() {
    loop = true;
    roll(); 
}

function roll() {
    if (loop === true) {
        btBet.click();
        refreshIntervalId = setInterval(roll2, delay); }
}

function roll2() { 
    btBet.click();
    clearInterval(refreshIntervalId)'
    roll()
}

function stop() {
loop = false;
}

问题:

当我点击开始按钮时,它开始执行。但是当我点击停止按钮时,它仍然执行。但是有if (loop === true)但是当loopfalse的时候还不停

我似乎无法遇到你的问题 - 这个脚本对我来说工作得很好。

但我已经解决了一些问题。

  • 不需要roll2函数。
  • 如果setInterval可以用setTimeout代替,这样就不用每次都清除了
  • 你应该 clearTimeout 调用 stop

jsFiddle

var delay = 1000;
var btBet = document.getElementById("make-bet");
var loop = true;
var input=document.createElement("input");
input.type="button";
input.value="Start";
input.onclick = start;
input.setAttribute("style", "font-size:18px;position:absolute;top:120px;right:40px;");
document.body.appendChild(input); 

var input=document.createElement("input");
input.type="button";
input.value="Stop";
input.onclick = stop;
input.setAttribute("style", "font-size:18px;position:absolute;top:120px;right:130px;");
document.body.appendChild(input); 

function start() {
    loop = true;
    roll(); 
}

function roll() {
    if (loop === true) {
        console.log("roll");
        refreshIntervalId = setTimeout(roll, delay);
    }
}

function stop() {
    loop = false;
    clearTimeout(refreshIntervalId);
}