当返回值在新行时,为啥 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 不使用 \n 打印新行?

当 innerHTML 时,表单值在上一页丢失

为啥 + [] 在 Javascript 中返回 0? [复制]

如何确保此文本输入值在没有 javascript 的情况下工作?

为啥当我输入整数数据时,它的值在 Codeigniter 中总是四舍五入

为啥在三元运算符中使用“0”会返回第一个值?