是否每个Javascript函数都必须返回一个值

Does every Javascript function have to return a value?

本文关键字:一个 返回 Javascript 函数 是否      更新时间:2023-09-26

我正在使用Netbeans为每个函数添加专业的注释,我写道。所以我用/**开始每一个,然后按Enter让Netbeans完成下面函数的默认注释方案。

到目前为止,我一直只将其用于PHP语言,在这种情况下,如果以下PHP函数真的包含return语句,Netbeans总是只在注释方案中添加@returns {type}部分。在所谓的"过程"(不返回任何值的函数)中,缺少此部分。

今天,我为Javascript函数尝试了同样的方法,Netbeans在注释方案中添加了@returns {undefined}部分,尽管下面的函数并没有返回任何内容。

这让我很困惑。Netbeans是否这样建议,每个Javascript函数都必须返回任何东西?我该怎么办?忽略(或删除)那个注释方案部分或遵循建议(如果这是建议的话),并在该函数的末尾添加return false;,尽管这对我来说没有用?

简短的答案是否定的

real的答案是肯定的:JS引擎必须被通知某个函数已经完成了它的业务,这是由函数返回一些东西来完成的。这也是为什么一个函数被称为"已返回"而不是的"已完成"
缺少显式返回语句的函数将返回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

在一些非常的低级别,返回被转换为某种跳跃。如果一个函数真的没有返回,那么就无法知道什么时候调用下一个函数,或者调用事件处理程序等等。

概括一下:不,JS函数不需要返回任何代码。但就JS引擎而言:函数总是返回一些东西,无论是通过return语句显式返回,还是隐式返回。如果函数隐式返回,则其返回值将始终是未定义的。

否,不需要return

如果未指定return语句,则返回undefined

每个Javascript函数都必须返回一个值吗?

不,他们没有。的确,在规范的深处,这些都有轻微的不同:

function foo() {
}
function foo() {
    return;
}
function foo() {
    return undefined;
}

调用的结果是相同的:CCD_ 13。因此,从务实的角度来看:

  1. 您不必编写return,只需让代码执行即可;从末端掉下来";函数的
  2. 如果您返回undefined,具体地说,您可以只写return;
  3. 当调用一个函数时,您无法(在代码中)判断执行是落在末尾、以return;结束还是以return undefined;结束;它们在您的调用代码中看起来完全相同

关于规范:特别是,当一个函数的执行落在末尾时,在规范中,它是一个";正常的";完成但CCD_ 19和CCD_;返回";具有关联值(undefined)的补全,该值(稍微)不同。但调用函数的语义消除了这种差异,比如:

  1. 如果结果。[[Type]]为return,返回NormalComplete(result.[Value]])
  2. ReturnIfAbrupt(结果
  3. 返回NormalComplete(未定义

所以在代码中没有什么区别。

不,您不必为每个函数返回一些东西。它是可选的,取决于您如何编写代码逻辑。