javascript 函数返回的语法(空格)是否会影响结果

Does the syntax (whitespace) of a javascript function return affect the result?

本文关键字:是否 影响 结果 空格 函数 返回 语法 javascript      更新时间:2023-09-26

在编写一个javascript函数来评估多变量条件时,我遇到了Javascript中的解析器错误。 如果我忘记了什么,或者这是否是适当的行为,请告诉我。

在我的函数中,我返回了几个变量的AND结果,如下所示:

return
// a comment, for kicks
a1 && a2
&&
b1 && b2
&&
// another comment
c1 && c2
&&
d1 && d2
;

然而,即使所有这些变量的显式值都是true,该函数也会返回undefined而不是预期的true

我已经尝试了几种返回此表达式的变体,并发现:

  1. 多行表达式 -- 失败
  2. 单行表达式 -- 有效
  3. 用帕雷塞斯包装表达 -- 作品
  4. 将多行表达式设置为变量,然后返回变量 -- 有效

查看工作示例:http://jsfiddle.net/drzaus/38DgX/

谁能解释为什么会这样?

你遇到的是Javascript中一种奇怪的行为,称为"分号插入"。长话短说,当一行的结尾可以被解释为语句的结尾而不引入语法错误时,Javascript 会这样做。return语句后面的换行符符合条件 - 为了防止这种情况发生,您可以将返回值括在括号中,如下所示:

return (
  a1 && a2
  ...
  d1 && d2
);

有关更多详细信息(以及规范中的引用): 难以理解分号插入

这是

正确的行为。将return;放入函数将导致它返回undefined。在您的示例中,return 后面的换行符使解析器认为这是语句的结尾,因此它返回 undefined

啊哈 -- 相关链接万岁:JavaScript 空格语法错误

解析器似乎在return后看到换行符,并自动将其处理为分号。 在它工作的情况下,要么有一个parethesis向解析器指示它实际上是一个多行子句,要么它在一行上(从而否定自动插入),或者在变量的情况下,解析器以不同的方式处理它。