ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

今天我为 Javascript 函数尝试了同样的事情,Netbeans 在评论方案中添加了 @returns {undefined} 部分,即使下面的函数没有返回任何内容。

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

如果没有指定返回值,JavaScript 将返回 undefined。在许多语言中,最后一条语句的结果被返回(更有用,IMO)。这些称为隐式返回
这回答了你的问题了吗? Do I have to return something in javascript function?

E
Elias Van Ootegem

最简洁的答案是不。

真正的答案是肯定的:必须通知 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 语句显式地还是隐式地返回。如果函数隐式返回,则其返回值将始终未定义。


我不相信 C++(或 C)“返回空白”。 “void”标签表示它不返回任何内容。虽然这是一个小问题,但与所提出的问题无关。
实际上不返回 void,它什么也不返回,但它的签名通过 void 返回类型反映了这一点。
显式返回与隐式返回是否有任何性能优势?
@4m1r:我不知道,这可能取决于引擎。如果存在性能差异,则很可能可以忽略不计。隐式返回 vs return; 可能仅在您需要提前返回时才有用。如果 undefined 解析为不同的值,则写入 return undefined; 可能会产生不同的结果。当您尝试重新分配 undefined 时,大多数(如果不是全部)浏览器都会抛出错误,但理论上,有可能here's an example using node.js
@SebastianLasse:我指的是其他语言(如 C)中的 void,您可以在其中拥有 void do_someting(int *arg) 之类的函数,但不能拥有 void 类型的变量。在 C 中,void 并不是真正的类型,因此这些函数不返回 任何内容,它们只是跳转
V
VLAZ

不,return 不是必需的。

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


T
T.J. Crowder

每个 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(结果)。返回正常完成(未定义)。

因此,您可以在代码中观察到没有区别。


m
mohkhan

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