我正在使用 Netbeans 为每个函数添加类似专业的注释,我写道。所以我以 /**
开始每一个,然后按 Enter
让 Netbeans 实现以下功能的默认注释方案。
到目前为止,我一直只将它用于 PHP 语言,在这种情况下,Netbeans 总是仅在注释方案中添加 @returns {type}
部分,如果以下 PHP 函数确实包含 return
语句。在所谓的“程序”(不返回任何值的函数)上,这部分丢失了。
今天我为 Javascript 函数尝试了同样的事情,Netbeans 在评论方案中添加了 @returns {undefined}
部分,即使下面的函数没有返回任何内容。
这让我很困惑。 Netbeans 是否建议这样,每个 Javascript 函数都必须返回任何内容?我应该怎么办?忽略(或删除)该评论方案部分或遵循建议(如果这是建议的话)并在此类功能的末尾添加 return false;
,尽管它对我没用?
undefined
。在许多语言中,最后一条语句的结果被返回(更有用,IMO)。这些称为隐式返回。
最简洁的答案是不。
真正的答案是肯定的:必须通知 JS 引擎某个函数已经完成了它的业务,这是由函数返回一些东西来完成的。这也是为什么,而不是 “完成”,函数被称为 “已返回”。
缺少显式返回语句的函数将返回 {1 },就像一个没有返回值的 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
在某个非常低的水平上,回报被转化为某种跳跃。如果一个函数真的什么都没有返回,就无法知道什么时候调用下一个函数,或者调用事件处理程序等。
回顾一下:不,就您的代码而言,JS 函数不需要返回任何内容。但就 JS 引擎而言:函数总是返回一些东西,无论是通过 return
语句显式地还是隐式地返回。如果函数隐式返回,则其返回值将始终未定义。
不,return
不是必需的。
如果未指定 return
语句,则返回 undefined
。
每个 Javascript 函数都必须返回一个值吗?
不,他们没有。确实,在规范的深处,这些都略有不同:
function foo() {
}
function foo() {
return;
}
function foo() {
return undefined;
}
...但是调用它们每个的结果都是相同的:undefined
。所以从务实的角度来说:
您不必编写返回,您可以让代码执行“脱离函数的末尾” 如果您返回未定义,具体来说,您只需编写返回;调用函数时,您无法(在代码中)判断执行是否结束,以 return; 结束,或者以 return undefined;; 结束。它们看起来与您的调用代码完全相同
关于规范:具体来说,当一个函数的执行结束时,在规范中这是一个“正常”的完成;但是 return;
和 return value;
都是具有关联值 (undefined
) 的“返回”完成,这是(稍微)不同的。但是 calling a function 的语义消除了差异,它说:
... 如果 result.[[Type]] 返回,则返回 NormalCompletion(result.[[Value]])。 ReturnIfAbrupt(结果)。返回正常完成(未定义)。
因此,您可以在代码中观察到没有区别。
不,你不必为每个函数返回一些东西。它是可选的,取决于您如何编写代码逻辑。
不定期副业成功案例分享
void
,它什么也不返回,但它的签名通过void
返回类型反映了这一点。return;
可能仅在您需要提前返回时才有用。如果undefined
解析为不同的值,则写入return undefined;
可能会产生不同的结果。当您尝试重新分配 undefined 时,大多数(如果不是全部)浏览器都会抛出错误,但理论上,有可能here's an example using node.jsvoid
,您可以在其中拥有void do_someting(int *arg)
之类的函数,但不能拥有void
类型的变量。在 C 中,void
并不是真正的类型,因此这些函数不返回 任何内容,它们只是跳转