3 回答

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

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)。
因此,您可以在代码中观察到没有区别。
添加回答
举报