此代码会 return 错误吗?

Will this code ever return false?

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

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 但如果 e.keyCode 不总是等于 RETURN_KEY_CODE 它不会总是 return false。你有 2 return。第一个在第一个if so if e.keyCode !== RETURN_KEY_CODE的else中,false是return。否则,您 if 将正常结束并且其后的指令为 return 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
}

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

如果想说得更清楚,可以把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
    }

}

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

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

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