如果我有一个javascript函数,我可能不会从每个代码路径返回一个值,例如:
function f()
{
if (checkSomething())
{
return 42;
}
// no return statement here
}
这是有效的javascript还是只是偶然发挥作用(即在某些浏览器中运行时可能会出现问题)?
答案 0 :(得分:12)
是的,它是有效的javascript。如果checkSomething()
评估为false
,则会返回undefined
。
有关详细信息,请参阅http://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope。
尽管如此,你应该注意到返回不同类型的数据(在这种情况下,是一个整数或undefined
)是不好的做法。
答案 1 :(得分:3)
由于与编译的Javascript相比,Javascript是一种松散的语言,因此您可以逃避大多数编译语言不允许的事情。所以,是的,它可以完成,这只是你想要做这样的事情的问题。如果您尝试使用C#或类似语言编译此代码,编译器将生成错误。
我不是要批评你的代码,只是提出一个好的设计建议。函数旨在返回所有代码路径上的值,并且由调用代码来检查返回值并决定要执行的操作。您可以检查undefined的返回值或checkSomething()返回false时的值,或者您可以将值设置为调用代码在返回时可以检查的更有意义的值。您可能有返回值表示调用者的某些事情。 -1表示一件事,-2表示其他东西。
希望这有帮助。
答案 2 :(得分:2)
这个JavaScript会起作用,请记住,如果您尝试读取f
的返回值,如果没有执行undefined
语句,它将被设置为return
。
我个人认为这段代码有点奇怪。如果您要从一个代码路径返回,我建议您从所有其他可能的代码路径返回。这样,阅读和使用您的代码的人确切地知道会发生什么。