这个代码会返回false吗

Will this code ever return false?

本文关键字:false 返回 代码      更新时间:2023-09-26

我正在查看一些逻辑看起来有缺陷的代码。我不确定下面的代码是否会因为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,但如果e.keyCode不总是等于RETURN_KEY_CODE,则它不会总是返回false。您有2次退货。第一个在第一个if so if e.keyCode!==的else中RETURN_KEY_CODE,false为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
}

我没有看到任何等待,如果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
    }
}

只需运行一个测试。似乎您对函数中有多个"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');
})();