此代码会 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');
})();
我正在审查一些逻辑看起来有缺陷的代码。由于 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');
})();