代码开头的分号仍然是好习惯吗?
Posted
技术标签:
【中文标题】代码开头的分号仍然是好习惯吗?【英文标题】:Is semicolon at the beginning of code still good practice? 【发布时间】:2013-02-08 05:22:51 【问题描述】:有人告诉我,始终在 javascript 代码的开头插入分号是一种很好的做法,如下所示:
;(function()
)();
但是,很多流行的 JavaScript 库/框架并不使用这个,例如 jQuery、Backbone 等。
我相信开头的分号应该是为了防止坏代码破坏缩小/压缩的代码等。但是,为什么没有人再使用它了?
开头的分号是不是因为某种原因没用了?
【问题讨论】:
没有人再这样做了:你有什么样的证据来支持这个说法? 如果您想谈论“良好实践”,我会说将调用括号移到包含函数的括号内。 "函数调用前的分号是防止连接脚本和/或其他可能无法正确关闭的插件的安全网。" (jqueryboilerplate.com) 仅当您在同时加载/执行其他第 3 方脚本的页面上编写脚本时才需要。 您可能会考虑的另一件事是在代码的 end 处添加分号。它在语法上是正确的,它为附加到您的脚本添加了保护。 @mcpDESIGNS 不,没关系:(function()())
与 (function())()
相同
【参考方案1】:
更常见的做法是在文件末尾添加分号。问题是,当您像这样连接两个文件时:
// file1.js
(function()
)()
// file2.js
(function()
)()
如果在file1
的末尾不加分号,它将尝试使用file2
中的函数调用file1
中的函数的返回值。
在每个文件的末尾加上一个分号可以解决这个问题(就像把它们放在开头一样)。
另一种方法是将函数调用变成这样的语句:
!function()
();
我认为这也是 JSLint 推荐的,因为在这种情况下,您不必担心分号(尽管无论如何您都应该使用它们,但这完全是另外一个讨论;)。
【讨论】:
你有!function () ();
的用法示例吗?实际上,我以前从未见过这种语法! +1
Ben Alman 写了一篇很棒的文章:benalman.com/news/2010/11/…【参考方案2】:
理想情况下,压缩和合并多个文件应该不会影响您的编码风格。您应该能够按照自己的意愿编写程序,然后使用自动化工具正确合并和缩小您的项目。
有很多自动化工具可以做到这一点。以UglifyJS 2 为例。如果您环顾四周,我相信您将能够找到更多此类工具。
回到这个问题,正如 Daff 所指出的,在立即调用的函数表达式之后插入分号很重要。但是,没有理由在它前面加上分号。如果你是个好孩子,并且在每个语句和表达式后加上一个分号,那么你就不会有任何问题。
永远不要让 JavaScript 为您自动插入分号。
唯一可以不放分号的地方是函数声明之后:
function foo() // it's alright to not put a semicolon here
但是,如果您使用的是函数表达式,那么请始终使用分号。
(function foo() )(); // you should put a semicolon here
将分号放在其他任何地方只会令人困惑。尤其是在一行的开头。其他编程背景的人也可能认为这是行尾注释的开始。
【讨论】:
“你应该可以随心所欲地编写程序……[然后一堆规则暗示你不应该随心所欲地编写程序]” 这是矛盾的。 "不要让 JavaScript 自动为你插入分号。" That's silly. "唯一允许不放分号的地方是函数声明” 错了。 “将分号放在其他地方只会令人困惑。” 这只是您的意见。 “其他编程背景的人也可能认为这是行尾注释的开始。”这无关紧要。以上是关于代码开头的分号仍然是好习惯吗?的主要内容,如果未能解决你的问题,请参考以下文章
这是使用 WebView 而不是 Textview 的好习惯吗? [关闭]