javascript 函数返回的语法(空格)是否会影响结果
Does the syntax (whitespace) of a javascript function return affect the result?
在编写一个javascript函数来评估多变量条件时,我遇到了Javascript中的解析器错误。 如果我忘记了什么,或者这是否是适当的行为,请告诉我。
在我的函数中,我返回了几个变量的AND
结果,如下所示:
return
// a comment, for kicks
a1 && a2
&&
b1 && b2
&&
// another comment
c1 && c2
&&
d1 && d2
;
然而,即使所有这些变量的显式值都是true
,该函数也会返回undefined
而不是预期的true
。
我已经尝试了几种返回此表达式的变体,并发现:
- 多行表达式 -- 失败
- 单行表达式 -- 有效
- 用帕雷塞斯包装表达 -- 作品
- 将多行表达式设置为变量,然后返回变量 -- 有效
查看工作示例:http://jsfiddle.net/drzaus/38DgX/
谁能解释为什么会这样?
你遇到的是Javascript中一种奇怪的行为,称为"分号插入"。长话短说,当一行的结尾可以被解释为语句的结尾而不引入语法错误时,Javascript 会这样做。return
语句后面的换行符符合条件 - 为了防止这种情况发生,您可以将返回值括在括号中,如下所示:
return (
a1 && a2
...
d1 && d2
);
有关更多详细信息(以及规范中的引用): 难以理解分号插入
这是
正确的行为。将return;
放入函数将导致它返回undefined
。在您的示例中,return
后面的换行符使解析器认为这是语句的结尾,因此它返回 undefined
。
啊哈 -- 相关链接万岁:JavaScript 空格语法错误
解析器似乎在return
后看到换行符,并自动将其处理为分号。 在它工作的情况下,要么有一个parethesis向解析器指示它实际上是一个多行子句,要么它在一行上(从而否定自动插入),或者在变量的情况下,解析器以不同的方式处理它。
相关文章:
- 是否可以使用Chart.js缩短雷达图上的外部标签,而不影响其他标签
- javascript getAttribute是否会影响性能或触发布局
- javascript 函数返回的语法(空格)是否会影响结果
- 是否有任何CSS属性对其元素没有影响
- socket.io (nodejs) 是否通过在回调完成期间阻止服务器来影响服务器性能
- 逗号运算符是否会影响 Javascript 中的执行上下文
- 异步加载的脚本是否会影响其他脚本的加载时间
- AngularJS:目录结构(例如模块化编程)是否会影响加载时间
- 此 JavaScript 代码是否也会通过禁用一个键来影响其他按键事件
- “DOCTYPE”是否会影响JavaScript中HTML5功能(如“postMessage”)的使用?
- 节点.js cron 是否会影响系统性能
- 使用 jQuery UI 选项卡拆分表单是否会影响表单发布到 PHP
- 在javascript中使用原型设计是否会对ajax调用和异步代码产生负面影响
- 一个 F.Select 是否在同一表单中影响另一个?(不需要)
- 影响某些元素的 jQuery 函数是否必须存在于代码中的元素之后
- 使用类选择器附加事件处理程序是否会影响该类的动态添加元素
- Javascript-命名空间嵌套是否存在任何硬性限制(或性能影响)
- 从Node.js在MySQL中更新-如何判断是否影响零行
- 使用局部变量(而不是重复的属性访问)是否会影响性能
- javascript文件是否可能只影响特定的DIV