这段代码会丢失吗?

时间:2015-03-25 11:40:49

标签: javascript if-statement logic

我正在审查逻辑看起来有缺陷的一些代码。我不确定以下代码是否会因为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语句。

2 个答案:

答案 0 :(得分:1)

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

如果你想让它更清晰,你可以把回报放在第一个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
    }

}

答案 1 :(得分:1)

刚开始测试。看起来你很困惑,当有多个&#34;返回&#34;函数中的语句。

return语句是一个常规语句,就像任何其他语句一样 - 除了它将中断本地块执行并将流控制返回到调用该函数的代码。你对一个,两个,三个返回的事实无动于衷......语言解释器严格遵循IF / ELSE规则 - 如果满足条件,那么块(用&#34; {}&#分隔34;直接在if下定义的是执行的那个,如果条件不满足,则执行相应的if的else块。无论是什么情况,if和else都会在到达目的时阻塞,将在if块之后立即将流返回到下一个语句(if块由if + else块组成),在此处的示例中,&#34; return true&#34;。

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