【问题标题】:Will this code ever return false?这段代码会返回 false 吗?
【发布时间】:2015-03-25 11:40:48
【问题描述】:

我正在审查一些逻辑看起来有缺陷的代码。由于 if else 返回流程,我不确定以下代码是否会返回 false。我的问题是,下面的代码是否会返回 false,甚至会抛出错误?

function performSearch(e) {
    if(e.keyCode === RETURN_KEY_KEYCODE) {
        var select = document.getElementById("selectmenusearch");
        var selected = select.options[select.selectedIndex].value;
        if(selected === 'organisation') {
            submitSearchForm('<%= doOrganisationSearchURL %>');
        } else {
            submitSearchForm('<%= doIndividualSearchURL %>');
        }
    } else {
        return false;
    }
    return true;
}

所以我的流程看起来像

if (this condition is true) {
    //execute some code
} else {
    return false
}
else return true

注意:我知道重构只有一个 return 语句会更好,但在我看来有两个 else 语句。

【问题讨论】:

  • 当e.keyCode !== RETURN_KEY_KEYCODE?
  • 不清楚你在问什么,看起来像一个非常常规的 if/else 块
  • 它应该等于 RETURN_KEY_CODE 因为它正在检查按键,如果已按下则可以提交表单
  • 我们是否同意如果 e.keyCode !== RETURN_KEY_CODE 代码流向带有“return false”的 else 块?
  • 啊,是的,所以如果不是真的,它会返回假,否则它仍然会执行代码但也会返回真......但我认为最终的返回语句与 else 语句相同,但是没有别的词?

标签: javascript if-statement logic


【解决方案1】:

它取决于 e.keyCode 但如果 e.keyCode 不总是等于 RETURN_KEY_CODE 它不会总是返回 false。你有 2 个回报。第一个在第一个的 else if 中如果 e.keyCode !== RETURN_KEY_CODE,则返回 false。否则,您的 if 将正常结束,并且它之后的指令返回 true。

function performSearch(e) {
    if(e.keyCode === RETURN_KEY_KEYCODE) {
        ...
    } else {
        return false;  // RETURN_KEY_KEYCODE !== e.keyCode
    }
    return true; // RETURN_KEY_KEYCODE === e.keyCode
}

如果 e.keyCode 不总是相同的值,我看不到任何等待它总是返回 false。 :)

如果你想让它更清楚,你可以把 return 放在第一个 if 的末尾。像这样:

function performSearch(e) {
    if(e.keyCode === RETURN_KEY_KEYCODE) {
        ...
        return true; // RETURN_KEY_KEYCODE === e.keyCode
    } else {
        return false;  // RETURN_KEY_KEYCODE !== e.keyCode
    }

}

【讨论】:

    【解决方案2】:

    只需运行测试。似乎您对函数中有多个“return”语句时会发生什么感到困惑。

    return 语句是一个常规语句,就像任何其他语句一样 - 除了它会中断本地块执行并将流程控制返回给调用该函数的代码这一事实。你有一个,两个,三个返回这一事实对你来说无关紧要......语言解释器严格遵循IF / ELSE规则 - 如果满足条件,那么块(用“{}”分隔,立即定义在if 是执行的,如果条件不满足,则执行相应的 if 的 else 块。无论如何,if 和 else 块在到达它们的末尾时,都会在if 块(if 块由 if + else 块组成),在此处的示例中,“返回 true”。

    (function() {
       if (k) {
          console('k renders true');
       }
       else {
          console.log('else reached');
          return false;
       }
       return true;
       console.log('bottom return true reached');
    })();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      • 2012-09-17
      • 2017-06-25
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      • 2016-06-27
      相关资源
      最近更新 更多