直到最近我才意识到这一点,但我在编写javascript代码时使用了Allman风格。
根据http://encosia.com/in-javascript-curly-brace-placement-matters-an-example/我应该使用K&R风格。这是因为在某些情况下,将花括号放在下一行可能会导致问题。对我来说,问题是我越来越喜欢奥尔曼的风格,我宁愿不改变。
因此,我的问题
-
allman风格真的会因为javascript中花括号的位置?jquery怎么样?
-
有什么技巧可以让我使用奥尔曼风格吗不会因为花括号而出现问题?
-
使用这些样式还有其他问题吗?
allman风格真的会因为位置而导致错误吗javascript中的花括号?
是的。正如您的链接所解释的,return
语句后面跟着一个换行符会在解析器试图插入分号时混淆解析器。不过,这种行为并不局限于返回对象文字。以下功能:
function foo()
{
return
"bar";
}
也将返回undefined
。
jquery怎么样?
无论是否包含jQuery,情况都完全相同。
有什么技巧可以让我在没有由于花括号引起的问题?
是的,不要将Allman样式与对象文字一起使用。考虑您要将对象文字分配给变量。你真的要写吗:
var foo =
{
bar: "quux"
};
或者你会选择:
var foo = {
bar: "quux"
};
IMHO第二个片段比第一个片段更可读。您可以继续使用Allman样式,并在for
、if
、while
、function
等中使用大括号,但对象文字除外。
使用这些样式还有其他问题吗?
return
是一个非常特殊的情况,因为无论有没有自变量,它都是有效的。当在一行中遇到一个单独的return
语句时,解析器无法判断是应该添加分号以使单行语句有效,还是继续到下一行并希望一切顺利。
因此,我认为这种行为只会成为return
和throw
的问题,而不是其他语句的问题。
请记住关于自动分号插入的ECMAScript规范:
某些ECMAScript语句(空语句、变量语句、,表达式语句
do-while
语句continue
语句break
语句、return
语句和throw
语句)必须终止使用分号。此类分号可能总是显式出现在源文本但是,为了方便起见,可以省略这些分号在某些情况下来自源文本。这些情况是通过说分号自动插入在这些情况下的源代码令牌流。
我嘲笑上面的建议是"方便"。。。
虽然从技术上讲,在上述未涵盖的情况下,您可以继续使用Allman格式,但我会提倡一致性。就我个人而言,我是GoogleJS风格指南的粉丝——与你的问题相关的部分是代码格式和分号。这里列出的例子值得一看。