为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕的地8271018 2019-10-17 14:20:43
我写道,我正在使用Netbeans向每个函数添加类似专业的注释。因此,我从每一个开始/**,然后按Enter来让Netbeans完成用于以下功能的默认注释方案。到现在为止,我一直只在PHP语言中使用它,在这种情况下@returns {type},如果遵循PHP函数确实包含了return声明,则Netbeans始终仅在注释方案中添加部分。在所谓的“过程”(不返回任何值的函数)上,缺少此部分。今天,我为Javascript函数尝试了同样的事情,@returns {undefined}即使跟踪函数不返回任何内容,Netbeans也在注释方案中添加了一部分。这让我感到困惑。Netbeans是否以这种方式建议每个Javascript函数都必须返回任何内容?我该怎么办?忽略(或删除)该注释方案的一部分或遵循建议(如果完全是建议),并return false;在此功能的末尾添加,尽管这对我来说毫无用处?
查看完整描述

3 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

最简洁的答案是不。


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


查看完整回答
反对 回复 2019-10-17
?
慕后森

TA贡献1802条经验 获得超5个赞

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


不,他们没有。诚然,在规范的深处,这些都略有不同:


function foo() {

}

function foo() {

    return;

}

function foo() {

    return undefined;

}

...但是调用它们各自的结果是相同的:undefined。因此,务实地说:


您不必编写return,只需让代码执行“落在函数的末尾”

特别是如果您要返回undefined,您只需写return;

调用函数时,您无法(以代码形式)告诉执行是从结尾处结束,以结尾结束return;还是以结尾结束return undefined;;它们看起来与您的调用代码完全相同

重新规范:具体来说,当函数的执行结束时,规范中的执行是“正常”完成。但是return;和return value;都是具有相关值(undefined)的“返回”补全,该值(略有不同)。但是通过调用函数的语义消除了这种区别,该语义说:


...


如果结果。[[Type]]是return,则返回NormalCompletion(结果。[[Value]])。

ReturnIfAbrupt(result)。

返回NormalCompletion(undefined)。

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


查看完整回答
反对 回复 2019-10-17
?
青春有我

TA贡献1784条经验 获得超8个赞

不,没有必要退货。


但实际上没有退货undefined


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 902 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信