2012-09-27 72 views
1

我写了这个简单的函数一次,以显示对哈希变更通知中:使用if-if或的if-else if-else语句的简单功能

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

请注意,在所有浏览器中不支持hashchange事件(正确),所以你应该填充(如果你还没有) – m90

+0

是的,我知道这一点。 – morgi

回答

4

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

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

在第二种情况下,如果第一种情况失败,那么第二种测试,如果失败,第三种测试,所以你的软件不花费无用的时间检查情况,这将不会发生。

0

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

+0

功能相同,但第二个版本似乎更具性能。我不一定在寻找最佳性能,所以你会说在这种情况下第一个版本更相关? – morgi

1

它可能与这个用例不相关,但第一种方式比较慢,因为解释器必须更频繁地检查条件。考虑一个被称为每秒60次的游戏循环,并且你没有构造你的if阻止您获得巨大的性能提升。

1

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

关于可读性,我个人比较喜欢第一种处理单个输入的方法。第二个工作表现更好,但如果你不熟练的开发人员,你可能会陷入多重边界。

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

2

就你而言,任何一种方法都可以。但是,有些时候使用else子句确实是处理重叠逻辑的最佳方式。

未测试p代码,只是为了示例

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

在这种情况下,else if意味着,如果所述第一条件是真,第二条件是从未检查