如何调查为什么 setTimeout 函数在我的代码中不起作用?
How to investigate why the setTimeout function is not working in my code?
我的代码有效,所有值都为真,因此它应该是 运行,但它不是。
我试过本地化变量、更改时间以及重新排列函数和名称标签。
auto1();
var autocount = 0;
var autotrue = 0;
function auto1(){
setTimeout(function() {
while(autotrue==1){
money = money + autocount;
setText("money_display",money);
}
}, 1000);
onEvent("auto1", "click", function(){
if(money >= 10){autotrue = 1;
money = money - 10;
autocount = autocount+1;
console.log("You now have " + autocount + " J$ per second");
} else {
console.log("you have insufficient J$ for this purchase");
}
});
}
我希望它每 1000 毫秒将我的 money 变量加 1。但它对 money 变量没有任何作用
您在变量 autocount
和 autotrue
初始化为 0 之前调用了 auto1
,因此它们仍然是 undefined
并且会破坏您的计算。您应该在 初始化所有变量后调用该函数 。
此外 while(autotrue==1){
看起来好像是无限的,因为没有任何变化 autotrue
。无限循环总是不好的。
这里有几个问题:
setTimeout
仅在 1000 毫秒结束时运行一次。在这种情况下,当它运行时,您将进入一个无限循环,因为 autotrue 永远不会设置为真。它仍然是 0,你把它加到钱上,钱永远不会超过 10,因为 0+0=0。
如果你想每 1000 毫秒重复加钱,你可以使用 setInterval
,内部没有任何循环。这将每隔 1000 毫秒一遍又一遍地调用您的函数。
把这个拿出来,你会看到定时器在工作。
while(autotrue==1){
money = money + autocount;
setText("money_display",money);
你的问题是你没有在任何地方将 autotrue var 设置为 1。
您的代码存在几个问题:
money
变量未定义
- 计时器内的
while
循环会使浏览器冻结
-
timeout
应该是 interval
而不是
autotrue
应该是布尔值
为了一个工作示例,我伪造了 setText()
函数并将 onEvent()
更改为 addEventListener()
:
auto1();
var autocount = 0;
var autotrue = false;
var money = 10;
function auto1() {
autoAddInterval = setInterval(function() {
if (autotrue) {
money = money + autocount;
setText("money_display", money);
}
}, 1000);
document.getElementById('auto1').addEventListener("click", function() {
if (money >= 10) {
autotrue = true;
money = money - 10;
autocount = autocount + 1;
console.log("You now have " + autocount + " J$ per second");
} else {
console.log("you have insufficient J$ for this purchase");
}
});
}
function setText(id, value) {
document.getElementById(id).innerText = value + ' J$';
}
setText("money_display", money);
balance: <span id="money_display">0 J$</span><br>
<button id="auto1">purchase +1 J$ per second</button>
我的代码有效,所有值都为真,因此它应该是 运行,但它不是。
我试过本地化变量、更改时间以及重新排列函数和名称标签。
auto1();
var autocount = 0;
var autotrue = 0;
function auto1(){
setTimeout(function() {
while(autotrue==1){
money = money + autocount;
setText("money_display",money);
}
}, 1000);
onEvent("auto1", "click", function(){
if(money >= 10){autotrue = 1;
money = money - 10;
autocount = autocount+1;
console.log("You now have " + autocount + " J$ per second");
} else {
console.log("you have insufficient J$ for this purchase");
}
});
}
我希望它每 1000 毫秒将我的 money 变量加 1。但它对 money 变量没有任何作用
您在变量 autocount
和 autotrue
初始化为 0 之前调用了 auto1
,因此它们仍然是 undefined
并且会破坏您的计算。您应该在 初始化所有变量后调用该函数 。
此外 while(autotrue==1){
看起来好像是无限的,因为没有任何变化 autotrue
。无限循环总是不好的。
这里有几个问题:
setTimeout
仅在 1000 毫秒结束时运行一次。在这种情况下,当它运行时,您将进入一个无限循环,因为 autotrue 永远不会设置为真。它仍然是 0,你把它加到钱上,钱永远不会超过 10,因为 0+0=0。
如果你想每 1000 毫秒重复加钱,你可以使用 setInterval
,内部没有任何循环。这将每隔 1000 毫秒一遍又一遍地调用您的函数。
把这个拿出来,你会看到定时器在工作。
while(autotrue==1){
money = money + autocount;
setText("money_display",money);
你的问题是你没有在任何地方将 autotrue var 设置为 1。
您的代码存在几个问题:
money
变量未定义- 计时器内的
while
循环会使浏览器冻结 -
timeout
应该是interval
而不是 autotrue
应该是布尔值
为了一个工作示例,我伪造了 setText()
函数并将 onEvent()
更改为 addEventListener()
:
auto1();
var autocount = 0;
var autotrue = false;
var money = 10;
function auto1() {
autoAddInterval = setInterval(function() {
if (autotrue) {
money = money + autocount;
setText("money_display", money);
}
}, 1000);
document.getElementById('auto1').addEventListener("click", function() {
if (money >= 10) {
autotrue = true;
money = money - 10;
autocount = autocount + 1;
console.log("You now have " + autocount + " J$ per second");
} else {
console.log("you have insufficient J$ for this purchase");
}
});
}
function setText(id, value) {
document.getElementById(id).innerText = value + ' J$';
}
setText("money_display", money);
balance: <span id="money_display">0 J$</span><br>
<button id="auto1">purchase +1 J$ per second</button>