我写了一次这个简单的函数,以显示有关散列更改的通知:
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;
如果是,是相关?
我在这里有点困惑,我想坚持最佳实践。
感谢您的帮助。
答案 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)
你的第二个版本是"正确"因为它的功能与第一个版本相同,但添加的代码完全是多余的。