javascript函数的语法(空白)是否会影响结果?

drz*_*aus 4 javascript debugging parsing

在编写一个javascript函数来评估多变量条件时,我遇到了似乎是Javascript中的解析器错误.如果我忘了某件事,或者这是否合适,请告诉我.

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

return
// a comment, for kicks
a1 && a2
&&
b1 && b2
&&
// another comment
c1 && c2
&&
d1 && d2
;
Run Code Online (Sandbox Code Playgroud)

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

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

  1. 多行表达式 - 失败
  2. 单行表达 - 作品
  3. 在paretheses包装表达 - 作品
  4. 将多行表达式设置为变量,然后返回变量 - 工作

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

任何人都可以解释为什么会这样吗?

dus*_*uff 7

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

return (
  a1 && a2
  ...
  d1 && d2
);
Run Code Online (Sandbox Code Playgroud)

有更多细节(以及规范中的引用):麻烦理解分号插入


Abr*_*ham 6

这是正确的行为.把return;一个函数将导致其返回undefined.在您的示例中,换行符return使得解析器认为这是语句的结尾,因此它返回undefined.