【问题标题】:Does the syntax (whitespace) of a javascript function return affect the result? [duplicate]javascript 函数返回的语法(空格)是否会影响结果? [复制]
【发布时间】:2012-08-11 21:51:49
【问题描述】:

在编写一个评估多变量条件的 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/

谁能解释为什么会这样?

【问题讨论】:

  • JSLint 说:Expected ';' and instead saw 'a1'.Unreachable 'a1' after 'return'.

标签: javascript debugging parsing


【解决方案1】:

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

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

有更多详细信息(以及规范中的引用):Trouble understanding semicolon insertion

【讨论】:

    【解决方案2】:

    啊哈——相关链接万岁: JavaScript Whitespace Syntax Error

    解析器似乎在return 之后看到了一个换行符,并自动将其视为分号。在它起作用的情况下,有一个括号向解析器表明它实际上是一个多行子句,或者它在单行上(因此否定自动插入),或者在 variable 的情况下它是解析器的处理方式不同。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • dang,我正在回答我自己的问题,你抢先了。我会在几秒钟内标记你。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 2013-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多