2011-07-25 35 views
3

如果我有一个JavaScript函数,它是可能的,我不从每一个代码路径返回一个值,例如:的Javascript功能,不以任何情况下返回值

function f() 
{ 
    if (checkSomething()) 
    { 
    return 42; 
    } 
    // no return statement here 
} 

这是有效的JavaScript或它是否只能偶尔运行(即在某些浏览器中运行时可能会出现问题)?

回答

12

是的,它是有效的JavaScript。如果checkSomething()的计算结果为false,则它将返回undefined

有关更多详细信息,请参阅http://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope。尽管如此,您应该注意,返回不同类型的数据(在这种情况下,整数或undefined)是不好的做法。

+3

+1但是任何东西都是虚假的; 0等人,而不仅仅是错误的。 –

+0

好点,我会更新。 – slaphappy

2

这段JavaScript会起作用,请记住,如果您尝试读取f的返回值,那么如果没有执行return语句,它将设置为undefined

我个人认为这个代码有点奇怪。如果您要从一个代码路径返回,我建议您也从其他所有可能的代码路径返回。这样,阅读和使用你的代码的人就可以确切地知道会发生什么。

3

由于Javascript是一种松散的语言与编译的语言相比,你可以摆脱大多数编译语言不允许的东西。所以是的,它可以做到,这只是一个问题,你是否想要做这样的事情。如果您尝试使用C#或类似语言编译此代码,编译器会生成一个错误。

我不想批评你的代码,只是提供一个好的设计建议。函数旨在返回所有代码路径上的值,并由调用代码来检查返回值并决定要执行的操作。您可以检查未定义的返回值或checkSomething()返回false时的返回值,或者可以将该值设置为更有意义的值,以便调用代码在返回时可以检查。你可能有返回值意味着某些东西给调用者。 -1意味着一件事,-2意味着别的东西。

希望这会有所帮助。

+0

我同意这不是很好的设计(这对我来说很明显,所以这不是问题)。 – M4N

+0

如果我的答案是居高临下,我很抱歉。我的目的是帮助那些可能遇到这篇文章的经验较少的编码人员,需要更多的背景知识。 – Moebius

相关问题