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