当返回值在新行时,为啥 Javascript 返回语句不起作用?
Posted
技术标签:
【中文标题】当返回值在新行时,为啥 Javascript 返回语句不起作用?【英文标题】:Why doesn't a Javascript return statement work when the return value is on a new line?当返回值在新行时,为什么 Javascript 返回语句不起作用? 【发布时间】:2012-01-21 15:34:09 【问题描述】:考虑以下 javascript:
function correct()
return 15;
function wrong()
return
15;
console.log("correct() called : "+correct());
console.log("wrong() called : "+wrong());
上述代码 sn-p 中的correct()
方法返回正确的值,在这种情况下为15
。但是,wrong()
方法返回 undefined
。大多数其他语言并非如此。
以下函数是正确的,并返回正确的值。
function wrong()
return(
15);
如果语法错误,它应该会发出一些编译器错误,但它不会。为什么会这样?
【问题讨论】:
What are the rules for Javascript's automatic semicolon insertion?的可能重复 这是我在返回值周围加上括号的原因之一。 结果是 15,而不是显示的 10。 是的已编辑。写错了。 语法没有错,它是有效的,只是没有预料到。在代码中的 return 语句之后,您只有一个无法访问的语句15
。
【参考方案1】:
从技术上讲,javascript 中的分号是可选的。但实际上它只是在某些换行符处为您插入它们,如果它认为它们丢失了。但它为您做出的决定并不总是您真正想要的。
return
语句后跟一个新行告诉 JS 解释器应该在 return
之后插入一个分号。因此,您的实际代码是这样的:
function wrong()
return;
15;
这显然是错误的。那么为什么会这样呢?
function wrong()
return(
15);
这里我们以 open(
开始一个表达式。当 JS 发现新行时,它知道我们在表达式的中间,并且在这种情况下不会插入任何分号。
【讨论】:
不,分号是语法的正式一部分,并且在该语言的语法产生中注意到分号是可选的。只是标准定义了省略它们时的行为。所以,它更像是一个特例……它就像是标准的附加组件。 可选,我的意思是脚本可以在没有它们的情况下解析。与许多其他语言(如 C 或 Java)相反,当分号不存在时,它们会在编译/评估时抛出错误。我并不是要鼓励 javascript 中缺少分号。事实上,恰恰相反。 困扰我的是“正式”这个词。省略是可以容忍的,但分号 是语法的一部分 - 正式。 很公平,那么“技术上”怎么样 :) “在实践中”怎么样......但是,请注意,分号并非在所有情况下都是可选的,仅在某些情况下是可选的。【参考方案2】:如果在该行的return
语句之后没有任何内容,则将在那里插入;
,这将导致返回没有任何值=> 返回值为undefined
。
见:http://lucumr.pocoo.org/2011/2/6/automatic-semicolon-insertion/
【讨论】:
【参考方案3】:javascript的命令行不能被换行符打破。但是函数的参数可能会被破坏,不强烈推荐(在您的示例中完成)。
【讨论】:
以上是关于当返回值在新行时,为啥 Javascript 返回语句不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 + [] 在 Javascript 中返回 0? [复制]
如何确保此文本输入值在没有 javascript 的情况下工作?