我的代码工作,所有值都是true,因此它应该运行,但它不会。
我试过本地化变量,改变时间,重新排列函数和名称标签。
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毫秒我的钱变量加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>
这里有一些问题:
setTimeout
只运行一次,在1000毫秒结束时。在这种情况下,当它运行时,你将进入无限循环,因为autotrue永远不会被设置为true。它仍然是0,你将它添加到金钱和金钱永远不会超过10,因为0 + 0 = 0。
如果你想每1000毫秒重复加钱,你会使用setInterval
,里面没有任何循环。这会每隔1000毫秒就会调用你的函数。
你在变量auto1
和autocount
被初始化为0之前调用autotrue
,因此它们仍然是undefined
并且会破坏你的计算。您应该在初始化所有变量后调用该函数。
另外while(autotrue==1){
看起来好像是无限的,因为没有什么改变autotrue
。无限循环总是坏的。
拿出来,你会看到计时器工作。
while(autotrue==1){
money = money + autocount;
setText("money_display",money);
您的问题是您没有将autotrue var设置为1。