tre*_*der 92 javascript return-value netbeans-7
我写道,我正在使用Netbeans为每个函数添加类似专业的注释.所以我开始使用它,/**然后我按下Enter让Netbeans实现以下功能的默认评论方案.
到目前为止,我一直只在PHP语言中使用它,在这种情况下@returns {type},如果遵循PHP函数真正包含return语句,Netbeans总是只添加注释方案的一部分.在所谓的"程序"(不返回任何值的函数)上,这部分缺失了.
今天我尝试了Javascript函数相同的东西,Netbeans添加@returns {undefined}了注释方案的部分,即使以下函数没有返回任何东西.
这困惑了我.Netbeans是否建议这样做,每个Javascript函数都必须返回任何内容?我该怎么办?忽略(或删除)评论方案部分或遵循建议(如果这是建议)并添加return false;到这样的功能的最后,虽然它对我没用?
Eli*_*gem 176
最简洁的答案是不.
在真正的答案是肯定的:JS引擎必须要通知一些功能已经完成了它的业务,这是由函数返回有所作为.这也是为什么,而不是"完成",一个功能被称为"已经返回".
缺少显式return语句的函数将返回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
}
Run Code Online (Sandbox Code Playgroud)
此外,在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
Run Code Online (Sandbox Code Playgroud)
在一些非常低的水平,回报转化为某种跳跃.如果函数根本没有返回任何内容,则无法知道调用下一个函数的内容和时间,或调用事件处理程序等.
所以回顾一下:不,就你的代码而言,JS函数不需要返回任何东西.但就JS引擎而言:函数总是返回一些东西,无论是通过return语句显式还是隐式返回.如果函数隐式返回,则其返回值将始终未定义.
每个 Javascript 函数都必须返回一个值吗?
不,他们没有。的确,在规范的深处,这些都略有不同:
function foo() {
}
function foo() {
return;
}
function foo() {
return undefined;
}
Run Code Online (Sandbox Code Playgroud)
...但调用它们中的每一个的结果都是相同的:undefined. 所以从实用的角度来说:
return,你可以让代码执行“从函数的末尾”undefined,特别是,你只是写return;return;还是结束return undefined;;它们看起来与您的调用代码完全相同重新规范:具体来说,当一个函数的执行结束时,在规范中这是一个“正常”的完成;但是return;和return value;都是具有关联值 ( undefined) 的“返回”完成,这是(稍微)不同的。但是调用函数的语义消除了差异,它说:
...
- 如果result .[[Type]] 是
return,则返回 NormalCompletion( result .[[Value]])。- ReturnIfAbrupt(结果)。
- 返回 NormalCompletion( undefined )。
所以你可以在代码中观察到没有区别。
| 归档时间: |
|
| 查看次数: |
72756 次 |
| 最近记录: |