【问题标题】:Avoid using functions inside if condition - Javascript [duplicate]避免在 if 条件中使用函数 - Javascript [重复]
【发布时间】:2016-05-14 18:09:00
【问题描述】:

为什么要避免在函数中的 if 条件中调用函数?例如:

var numberChoice = function(number){
   if (number == 1){
       alert("You have choosen 1");
       nextLevel();
   }

   else if(number == 2){
       alert ("You have choosen 2");
       nextLevel2();
   }

   else{
       alert("Please choose a number within range 1-2");
       guessAgain();
   }
};

var number = prompt("What is your number?");

我可能误解了正在发生的事情。能解释一下吗?

function example(){
  function a() {} // Okay 
  if (something) {
     function b() {} // Danger! 
  } 
}

哈弗贝克,马林 (2014-12-04)。 Eloquent JavaScript: A Modern Introduction to Programming (Kindle Locations 1168-1169)。没有淀粉出版社。 Kindle版。

【问题讨论】:

  • 可以在 if 条件下调用函数。谁说不要在 if 语句中调用函数?
  • 此外,给定的代码调用 if 正文中的函数,而不是条件。我们说的是同一件事吗?
  • @JordanHendrix:你能举个例子吗?我从未听说过这种疯狂的警告。
  • 我想你可能误会了。在条件中创建函数可能不是最佳实践。
  • 感谢您的快速回复和澄清。我觉得这很奇怪,不明白为什么。我会尝试找到它并提供参考。

标签: javascript


【解决方案1】:

除非您的函数(在 if 条件内)是异步的,否则没有问题。 您正在使用的函数是同步的 - 这意味着您的脚本将完成执行它并在执行下一个任务之前首先返回一个值 - 在这种情况下它会正常工作。 对于异步函数(与其他指令行并行执行),该函数的结果尚未返回,您的脚本将在没有正确值(返回值)的情况下继续执行 - 这将导致问题。

【讨论】:

    【解决方案2】:

    在您的两个示例中没有问题。

    没有规则不允许你在 if 条件下调用函数。

    唯一的一点是当您有多个 if 在同一个检查时发出警告:

    if (number === 1) {
      function1();
    }
    
        if (number === 2 ) {
           function2(); 
    }
    

    在这种情况下,如果您在函数将被调用时没有将 return 放在函数的末尾,则将评估其他条件。

    更好的代码是使用else 或switch

    在你的情况下没有问题。

    【讨论】:

      猜你喜欢
      • 2020-09-27
      • 2021-11-30
      • 1970-01-01
      • 2019-03-27
      • 2011-01-26
      • 2020-01-28
      • 2021-04-28
      • 2016-12-09
      相关资源
      最近更新 更多