JavaScript中不可靠的返回语句

JavaScript中不可靠的返回语句,javascript,function,Javascript,Function,以下函数工作并执行其预期任务-返回指定的所需值 function returnValue() { return( "value"); } 只将返回值拆分为新行 如果按如下方式删除这对括号,则返回undefined function returnValue() { return "value"; } 我使用的IDE发出如下警告 代码没有副作用 似乎“value”不是return语句本身的一部分 为什么它们的行为都不同?因为在Javas

以下函数工作并执行其预期任务-返回指定的所需值

function returnValue() {
    return( 
          "value");
}
只将返回值拆分为新行


如果按如下方式删除这对括号,则返回
undefined

function returnValue() {
    return 
         "value";
}
我使用的IDE发出如下警告

代码没有副作用

似乎“value”不是
return
语句本身的一部分


为什么它们的行为都不同?

因为在Javascript中,语句可以用换行符而不是分号终止。分号基本上是自动插入的,但仅在结果可以是完整语句的情况下插入

返回
本身是有效的,但随后您的函数将不返回任何内容和
的“值”没有副作用

另一方面,第一个例子根本无法用这种方式解析,因为该行在括号中间结束。


ECMA-262标准文件§7.9.1中描述了这些规则。

自动分号插入是原因。当要返回的表达式从
return
关键字的单独一行开始时,将在
return
语句后插入分号。分号在许多情况下是可选的,但这不是其中之一

所以

最终成为/被解释为

function returnValue() {
    return; // <- semicolon inserted here
         "value";
}
函数returnValue(){

return;//Javascript会在
return
之后自动插入分号


阅读更多信息:

这是因为JavaScript会自动在返回行的末尾添加分号,因此在第二个示例中,它基本上就好像只说了
返回;

@Shai:类似,但显然不是重复的。相关:
function returnValue() {
    return; // <- semicolon inserted here
         "value";
}