JavaScript中一个不稳定的返回语句

时间:2013-11-28 23:23:32

标签: javascript function

以下功能可以正常工作并返回预期的作业 - 返回指定的所需值。

function returnValue() {
    return( 
          "value");
}

只是将返回值拆分为新行。


如果删除了一对括号,则返回undefined

function returnValue() {
    return 
         "value";
}

我正在使用的IDE发出如下警告。

  

代码没有副作用

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

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

4 个答案:

答案 0 :(得分:4)

因为在Javascript中,语句可以通过分号的换行符而不是来终止。分号基本上是自动插入的,但仅限于结果可以是完整语句

return;本身有效,但之后您的函数不返回任何内容,"value";没有副作用。

另一方面,您的第一个示例无法以这种方式解析,因为该行以括号中间结束。

这些规则在ECMA-262标准文件的第7.7.1节中有所描述。

答案 1 :(得分:3)

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

所以

function returnValue() {
    return 
         "value";
}

最终成为/被解释为

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

导致返回undefined。解决此问题的一种方法是启动值,使其返回与return相同的行。

发生了 rules for when automatic semicolon insertion ,总结为

  

对ECMAScript程序员提出的实用建议是:

     
      
  1. 后缀++或 - 运算符应与其操作数出现在同一行。
  2.   
  3. return或throw语句中的表达式应该与return或throw标记在同一行开始。
  4.   
  5. break或continue语句中的标签应与break或continue标记位于同一行。
  6.   

答案 2 :(得分:2)

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

了解详情:What are the rules for JavaScript's automatic semicolon insertion (ASI)?

答案 3 :(得分:2)

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