在简单函数中使用if-if或if-else if-else

时间:2012-09-27 18:18:34

标签: javascript function if-statement

我写了一次这个简单的函数,以显示有关散列更改的通知:

function watchHash() {
    if(location.hash == '#thanks') {
        displayNotification('Thanks for your feedback, I\'ll try to get back to you as soon as possible.'); // Notify on form submit success
    }

    if(location.hash == '#error') {
        displayNotification('Oops, something went wrong ! Please try again.'); // Notify on form submit error
    }
}
window.onhashchange = watchHash;

我今天回来了,我想,如果我用这种方式写它是正确吗?

function watchHash() {
    if(location.hash == '#thanks') {
        displayNotification('Thanks for your feedback, I\'ll try to get back to you as soon as possible.'); // Notify on form submit success
    }
    else if(location.hash == '#error') {
        displayNotification('Oops, something went wrong ! Please try again.'); // Notify on form submit error
    }
    else {
        return;
    }
}
window.onhashchange = watchHash;

如果是,是相关

我在这里有点困惑,我想坚持最佳实践。

感谢您的帮助。

5 个答案:

答案 0 :(得分:4)

第二种情况要好得多。为什么呢?

因为在第一种情况下,如果满足第一条件或不符合第一条件 - 无所谓,第二种情况也被检查,第三种情况也是第四种情况,依此类推。

在第二种情况下如果第一种情况失败,则第二种情况进行测试,如果失败,则测试第三种情况,因此您的软件不会花费无用的时间检查不会发生的情况。

答案 1 :(得分:2)

在您的情况下,任何一种方法都可以正常工作。但是,有时使用else子句确实是处理重叠逻辑的最佳方法。

未经测试的p代码,仅供参考

if (isRaining) && (iHaveUmbrella) {
  iGetWet = false;
} else if (isRaining) {
  iGetWet = true;
} else {
  iGetWet = false;
}

在这种情况下,else if表示如果第一个条件为真,则第二个条件从不检查

答案 2 :(得分:1)

它可能与此用例无关,但第一种方式较慢,因为解释器必须更频繁地检查条件。考虑一个每秒调用60次的游戏循环,并且不构造if else块你将获得巨大的性能。

答案 3 :(得分:1)

无论哪种方式都能正常运作。两者之间的差异是可读性和编码模式。

关于可读性,我个人更喜欢第一种方式来处理单个输入。第二个可以提高性能,但如果你不熟练的开发人员,你可能会失去多个边界。

关于编码模式,我们可以看到第一个不会返回任何内容。第二个将仅返回null,因为哈希标记既不是您的选择。您不能使用此函数来检查条件,因为当hash标记为'#thanks'或'#error'时它不会返回。

答案 4 :(得分:0)

你的第二个版本是"正确"因为它的功能与第一个版本相同,但添加的代码完全是多余的。