1

我曾经写过这个简单的函数,用来显示哈希变化的通知:

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;

如果是这样,它是否相关

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

谢谢你的帮助。

4

5 回答 5

4

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

因为在第一种情况下,如果满足或不满足第一个条件 - 没关系,第二个情况也会被检查,第三个,第四个等等。

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

于 2012-09-27T18:21:36.100 回答
2

在您的情况下,任何一种方法都同样有效。但是,有时使用else子句确实是处理重叠逻辑的最佳方式。

未经测试的 p 代码,仅作为示例

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

在这种情况下,这else if意味着如果第一个条件为真,则永远不会检查第二个条件。

于 2012-09-27T18:50:11.593 回答
1

无论哪种方式都可以正常工作。两者之间的区别在于可读性和编码模式。

关于可读性,我个人更喜欢处理单个输入的第一种方式。第二个效果更好,但如果您不是熟练的开发人员,您可能会迷失在多个界限中。

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

于 2012-09-27T18:31:25.550 回答
1

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

于 2012-09-27T18:24:25.890 回答
0

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

于 2012-09-27T18:21:29.127 回答