以下功能可以正常工作并返回预期的作业 - 返回指定的所需值。
function returnValue() {
return(
"value");
}
只是将返回值拆分为新行。
如果删除了一对括号,则返回undefined
。
function returnValue() {
return
"value";
}
我正在使用的IDE发出如下警告。
代码没有副作用
似乎“值”不是return
语句本身的一部分。
为什么他们的行为都不同?
答案 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程序员提出的实用建议是:
- 后缀++或 - 运算符应与其操作数出现在同一行。
- return或throw语句中的表达式应该与return或throw标记在同一行开始。
- break或continue语句中的标签应与break或continue标记位于同一行。
醇>
答案 2 :(得分:2)
Javascript会在return
之后自动插入分号。
了解详情:What are the rules for JavaScript's automatic semicolon insertion (ASI)?
答案 3 :(得分:2)
那是因为JavaScript会自动在返回行的末尾添加分号,因此在第二个示例中,它基本上就像它只是说return;
一样。