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

2022-08-30 05:21:28

我正在使用 Netbeans 为每个函数添加类似专业的注释,我写道。因此,我以每个选项开始,然后按让 Netbeans 实现以下函数的默认注释方案。/**Enter

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

今天,我为Javascript函数尝试了同样的事情,Netbeans在注释方案中添加了一部分,即使下面的函数不返回任何东西。@returns {undefined}

这让我感到困惑。Netbeans是否建议这样,每个Javascript函数都必须返回任何内容?我该怎么办?忽略(或删除)该评论方案部分或遵循建议(如果这是建议)并添加此类功能的末尾,尽管它对我来说毫无用处?return false;


答案 1

简短的答案是否定的。

真正的答案是肯定的:必须通知JS引擎某些函数已经完成了其业务,这是由返回某些东西的函数完成的。这也是为什么函数不是“已完成”,而是称为“已返回”。
缺少显式 return 语句的函数将返回 ,就像没有返回值的 C(++) 函数一样(其签名反映了这一点)返回:undefinedvoid

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


答案 2

不,不是必需的。return

如果未指定任何语句,则返回。returnundefined