我正在使用Netbeans为每个函数添加类似专业的注释,我写道。所以我用/**
开始每一个,然后按Enter
让Netbeans完成以下功能的默认评论方案。
到目前为止,我一直只在PHP语言中使用它,在这种情况下,如果遵循PHP函数真正包含@returns {type}
语句,Netbeans总是只在注释方案中添加return
部分。在所谓的“程序”(不返回任何值的函数)上,这部分缺失了。
今天我为Javascript函数做了同样的事情,Netbeans将@returns {undefined}
部分添加到评论方案中,即使后续函数没有返回任何内容。
return false;
,虽然它对我没用?
答案 0 :(得分:167)
简短的回答是否。
真正的答案是肯定的:必须通知JS引擎某些功能已经完成其业务,这是由函数返回的东西完成的。这也是为什么,而不是“完成”,一个函数被称为“已经返回”。
缺少显式return语句的函数将返回undefined
,就像没有返回值的C(++)函数一样(并且其签名反映了这一点)返回void
:
void noReturn()//return type void
{
printf("%d\n", 123);
return;//return nothing, can be left out, too
}
//in JS:
function noReturn()
{
console.log('123');//or evil document.write
return undefined;//<-- write it or not, the result is the same
return;//<-- same as return undefined
}
此外,在JS中,就像在大多数语言中一样,你可以自由地忽略函数的返回值,这是非常重要的:
(function()
{
console.log('this function in an IIFE will return undefined, but we don\'t care');
}());
//this expression evaluates to:
(undefined);//but we don't care
在某些非常低级别,返回被转换为某种跳转。如果一个函数真的没有返回 nothing ,那么就无法知道调用下一个函数的内容和时间,或者调用事件处理程序等。
所以回顾一下:不,就你的代码而言,JS函数不需要返回任何东西。但就JS引擎而言:函数总是返回一些东西,无论是通过return
语句显式还是隐式返回。如果函数隐式返回,则其返回值将始终未定义。
答案 1 :(得分:22)
不,返回是没有必要的。
但返回实际上不会返回undefined
答案 2 :(得分:2)
不,你不必为每个功能都返回一些东西。它是可选的,直到您编写代码逻辑的方式。
答案 3 :(得分:2)
每个Javascript函数都必须返回一个值吗?
不,他们没有。的确,在规范的深处,它们全部略有不同:
append
...但每个调用的结果相同:function foo() {
}
function foo() {
return;
}
function foo() {
return undefined;
}
。因此,用务实的话来说:
undefined
,只需让代码执行“落在函数的末尾”即可。return
,则只需写undefined
return;
结尾还是以return;
结尾;它们看起来与您的调用代码完全相同重新规范:具体地说,当函数的执行落到最后时,规范中的执行是“正常”完成;但是return undefined;
和return;
都是具有相关值(return value;
)的“返回”补全,该值(略有不同)。但是calling a function的语义消除了这种差异,该语义表示:
...
- 如果结果。[[Type]]是
undefined
,则返回NormalCompletion(结果。[[Value]])。- ReturnIfAbrupt( result )。
- 返回NormalCompletion(未定义)。
因此您可以在代码中观察到没有区别。