2015-03-25 95 views
0

我在审查逻辑看起来有瑕疵的代码。我不确定下面的代码是否会返回false,因为if返回流。我的问题是,下面的代码是否会返回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 

注:我知道这将是更好的重构有只有一个返回语句,但就像有两个else语句在我看来。

+0

当'e.keyCode!== RETURN_KEY_KEYCODE'? – thefourtheye 2015-03-25 11:45:18

+0

并不清楚你的要求,看起来像一个非常规则的if/else块 – Veverke 2015-03-25 11:45:48

+0

它应该等于RETURN_KEY_CODE,因为它正在检查按键,if它已被按下,然后表单可以提交 – br3w5 2015-03-25 11:46:35

回答

1

它依赖于e.keyCode,但是如果e.keyCode不总是等于RETURN_KEY_CODE,它将不会总是返回false。你有2个回报。第一个是在第一个,如果是的话,如果e.keyCode!== RETURN_KEY_CODE,则返回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不总是相同的值。 :)

如果你想更清楚一点,你可以把返回结果放在第一个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 
    } 

} 
+0

我喜欢编辑的明确性 – br3w5 2015-03-25 12:02:00

1

只要运行测试。好像你对一个函数中有多个“return”语句时发生的情况感到困惑。

return语句与其他任何语句一样是一个常规语句 - 除了它会中断本地块执行并将流控制返回给调用该函数的代码。对你而言,你有一个,两个,三个回报......语言翻译严格遵循IF/ELSE规则 - 如果满足一个条件,那么该块(用{{}定义如果是被执行的那个,如果条件不满足,那么相应的if的else块被执行。无论是什么情况,if和else块在到达它们的末尾时都会返回到下一个语句如果块,在这里的例子, “返回true”(IF块由如果还有+块组成)。

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