Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何调查setTimeout函数在我的代码中不起作用的原因?_Javascript_Blockly - Fatal编程技术网

Javascript 如何调查setTimeout函数在我的代码中不起作用的原因?

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",

我的代码工作正常,所有值都为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。但是在变量
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$