【问题标题】:Calling a function if an operation is not true如果操作不正确,则调用函数
【发布时间】:2016-02-03 21:14:04
【问题描述】:

我还没有看到任何专门回答这个问题的东西。 我打算开发一个基于文本的游戏,该游戏涉及每次空闲栏填满时发生的动作(每 x 秒过去) 我只是想弄清楚我的 javascript 的基本布局,它将在这个游戏中制作战斗系统。

如果 pDamThisRound 不是 > baseD,我正在尝试让计算机重新计算 pDamThisRound,在这种情况下是 10。

如果它大于 baseD,我的代码可以工作并打印 pDamThisRound。但如果不是,则代码不会打印任何内容。

var baseD = 10;
var pStr = 25;
var pDam = Math.floor((baseD + pStr) / 2);
var pDamThisRound;

var pDamTR  = function() {
    pDamThisRound = (Math.floor(Math.random() * 2 * pDam));
};

pDamTR();

if(pDamThisRound > baseD) {
document.getElementById("h").innerHTML = pDamThisRound;
}

else {
pDamTR();
}

https://jsfiddle.net/qfnvf1y8/4/

【问题讨论】:

  • 你需要迭代。如果测试失败,您的代码会计算一个新值,但它不会再返回检查条件。
  • 在你的 else 分支中,你不打印任何东西......
  • 试试这样的:jsfiddle.net/qfnvf1y8/7
  • 我不敢相信这有多么简单。出于某种原因,我在想,如果不满足 if 语句的参数,它会在再次调用 pDamTR 后再次循环遍历 if 语句。很抱歉发布这样一个菜鸟错误。谢谢大家。

标签: javascript function variables if-statement


【解决方案1】:

代码什么也不打印

那是因为没有任何代码可以打印任何内容。看看你的else 块:

else {
    pDamTR();
}

那个函数有什么作用?:

var pDamTR  = function() {
    pDamThisRound = (Math.floor(Math.random() * 2 * pDam));
};

您在任何地方都不会产生任何输出。

基本上,如果你想打印一些东西,那么,打印一些东西。就像您在if 块中已经一样。例如:

document.getElementById("h").innerHTML = "something";

【讨论】:

  • 我的回答有用吗?如果不让我知道,我可以澄清一下
  • @SebastianGabrielVinci:嗯,对我来说并不是特别有用。但后来,我不是那个问这个问题的人。
  • 抱歉,我从底部滚动并错过了该框。答案和问题框看起来非常相似。
【解决方案2】:

函数 pDamTR 可能正在执行,问题是它为变量分配了一些东西,但什么也没做。

【讨论】:

    【解决方案3】:

    给你,一个带有 while 运算符的更正版本:

    https://jsfiddle.net/qfnvf1y8/6/

    var baseD = 10;
    var pStr = 25;
    var pDam = Math.floor((baseD + pStr) / 2);
    var pDamThisRound;
    
    var pDamTR  = function() {
        pDamThisRound = (Math.floor(Math.random() * 2 * pDam));
    };
    
    pDamTR();
    
    while(pDamThisRound <= baseD) {
        pDamTR();
    }
    
    if(pDamThisRound > baseD) {
    document.getElementById("h").innerHTML = pDamThisRound;
    }
    
    else {
    pDamTR();
    }
    

    问候,

    尤金

    【讨论】:

      【解决方案4】:

      几个错误:

      1) 你的 else 分支不打印任何东西
      2)如果你想要pDamThisRound &gt; baseD,你需要一个while循环

      while(pDamThisRound <= baseD) {
          pDamTR();
      }
      
      printpDamTR();
      
      function printpDamTR(){
          document.getElementById("h").innerHTML = pDamThisRound;
      }
      

      函数printpDamTR 不是必需的,但封装这些东西通常是个好主意,因为您可能会更频繁地使用它。它还增加了代码的可维护性,因为您放松了 JS 和 HTML 之间的依赖关系。

      【讨论】:

        【解决方案5】:

        您可以使用setTimeout 来帮助您,例如:

        var baseD = 10;
        var pStr = 25;
        var pDam = Math.floor((baseD + pStr) / 2);
        var timeoutDuration = 3000; // 3 seconds
        
        
        window.setTimeout(function () { 
          // execute the check and the update logic here
        
          var pDamThisRound = (Math.floor(Math.random() * 2 * pDam));
        
          if(pDamThisRound > baseD) {
            document.getElementById("h").innerHTML = pDamThisRound;
          }
        
        }, timeoutDuration);
        

        这将每 3 秒执行一次检查

        【讨论】:

          猜你喜欢
          • 2013-06-24
          • 1970-01-01
          • 1970-01-01
          • 2011-09-29
          • 1970-01-01
          • 2017-05-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多