Javascript 如何调查setTimeout函数在我的代码中不起作用的原因?
我的代码工作正常,所有值都为true,因此它应该正在运行,但它没有 我尝试了本地化变量、更改计时以及重新排列函数和名称标记Javascript 如何调查setTimeout函数在我的代码中不起作用的原因?,javascript,blockly,Javascript,Blockly,我的代码工作正常,所有值都为true,因此它应该正在运行,但它没有 我尝试了本地化变量、更改计时以及重新排列函数和名称标记 auto1(); var autocount = 0; var autotrue = 0; function auto1(){ setTimeout(function() { while(autotrue==1){ money = money + autocount; setText("money_display",
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。但是在变量
autocount
和autotrue
被初始化为0之前,它对您调用的货币变量auto1
没有任何作用,因此它们仍然未定义,并且会破坏您的计算。您应该在初始化所有变量后调用该函数
另外while(autotrue==1){
看起来好像是无限的,因为没有任何变化autotrue
。无限循环总是不好的。在变量autocount
和autotrue
初始化为0之前调用auto1
,因此它们仍然未定义,并将中断计算。您应该调用它函数在初始化所有变量后运行
另外,while(autotrue==1){
看起来好像是无限的,因为没有任何变化autotrue
。无限循环总是不好的。这里有一些问题:
setTimeout
仅在1000毫秒结束时运行一次。在这种情况下,当它运行时,您将进入一个无限循环,因为autotrue从未设置为true。它仍然为0,您将其添加到money中,money将永远不会超过10,因为0+0=0
如果您想每1000毫秒重复添加一次money,您可以使用setInterval
,内部没有任何循环。这将每1000毫秒反复调用您的函数。这里有一些问题:
setTimeout
仅在1000毫秒结束时运行一次。在这种情况下,当它运行时,您将进入一个无限循环,因为autotrue从未设置为true。它仍然为0,您将其添加到money中,money将永远不会超过10,因为0+0=0
如果你想每1000毫秒重复增加一次钱,你可以使用setInterval
,里面没有任何循环。这会每1000毫秒反复调用你的函数。取出这个,你就会看到计时器工作了
while(autotrue==1){
money = money + autocount;
setText("money_display",money);
您的问题是,您没有在任何地方将autotrue var设置为1。取出此项,您将看到计时器工作正常
while(autotrue==1){
money = money + autocount;
setText("money_display",money);
您的问题是您没有在任何地方将autotrue var设置为1。您的代码有几个问题:
未定义money
变量
计时器内的while
循环将使浏览器冻结
超时
应该是一个间隔
autotrue
可能应该是布尔值
我伪造了setText()
函数,并将onEvent()
更改为addEventListener()
,以供参考:
auto1();
var自动计数=0;
var autotrue=false;
var货币=10;
函数auto1(){
autoAddInterval=setInterval(函数(){
如果(自动跟踪){
货币=货币+自动计数;
setText(“货币显示”,货币);
}
}, 1000);
document.getElementById('auto1')。addEventListener(“单击”,函数(){
如果(货币>=10){
自动真=真;
金钱=金钱-10;
自动计数=自动计数+1;
log(“您现在有“+自动计数+”每秒J$”;
}否则{
log(“您没有足够的J$用于此次购买”);
}
});
}
函数setText(id、值){
document.getElementById(id).innerText=value+'J$';
}
setText(“货币显示”,货币);
余额:0 J$
每秒购买+1 J$
您的代码有几个问题:
未定义money
变量
计时器内的while
循环将使浏览器冻结
超时
应该是一个间隔
autotrue
可能应该是布尔值
我伪造了setText()
函数,并将onEvent()
更改为addEventListener()
,以供参考:
auto1();
var自动计数=0;
var autotrue=false;
var货币=10;
函数auto1(){
autoAddInterval=setInterval(函数(){
如果(自动跟踪){
货币=货币+自动计数;
setText(“货币显示”,货币);
}
}, 1000);
document.getElementById('auto1')。addEventListener(“单击”,函数(){
如果(货币>=10){
自动真=真;
金钱=金钱-10;
自动计数=自动计数+1;
log(“您现在有“+自动计数+”每秒J$”;
}否则{
log(“您没有足够的J$用于此次购买”);
}
});
}
函数setText(id、值){
document.getElementById(id).innerText=value+'J$';
}
setText(“货币显示”,货币);
余额:0 J$
每秒购买+1 J$