有人能解释为什么换行符使返回语句在JavaScript中未定义吗

Can anyone explain why linebreaks make return statements undefined in JavaScript?

本文关键字:JavaScript 未定义 语句 返回 能解释 为什么 换行符      更新时间:2023-09-26

这已经是我痛苦的根源好几个小时了。有人能解释为什么会这样吗?

function x(){
    return //when there's a line break it doesn't work
    2;
};
alert(x());
function y(){
    return 4; //when there's no line break it works 
};
alert(y());
//Can anyone explain this?

我一直认为JavaScript不关心换行。如果您有ECMA官方文档的链接,我将不胜感激。谢谢

以下是用于自动分号插入的ECMAScript规则。相关章节为:

当遇到continue、break、return或throw令牌,并且在下一个令牌之前遇到LineTerminator时,会在continue、break、return或抛出令牌之后自动插入分号。

简而言之,您的代码被解析为:

return;
2;

与大多数其他语言不同,JavaScript试图通过在它认为你已经忘记的地方添加分号来"修复"你的代码。

Return语句就是这样一种情况——如果Return语句后面有换行符,它将被解释为Return;

JavaScript将return后的一个换行符视为;因此:

return 
2;

2;是无法访问的代码。

JavaScript中唯一的return返回undefined。就像没有return的函数一样。

来自mozilla的JS grammahttp://www-archive.mozilla.org/js/language/grammar14.html#N-报表

注:

the OptionalSemicolon grammar state can sometimes reduce to «empty»