我正在考虑是否值得采用JavaScript无分号风格。
如果我的JavaScript代码没有分号:
function(){
var first = 1
var second = 2
sum = 1 + 2
return sum
}
它将在浏览器和Node.js中工作。
但是,经过Uglify或Closure Compiler压缩的代码能否在浏览器和Node.js中工作?
我阅读了文章JavaScript中的分号是可选的。它说应该可以工作。
我正在考虑是否值得采用JavaScript无分号风格。
如果我的JavaScript代码没有分号:
function(){
var first = 1
var second = 2
sum = 1 + 2
return sum
}
它将在浏览器和Node.js中工作。
但是,经过Uglify或Closure Compiler压缩的代码能否在浏览器和Node.js中工作?
我阅读了文章JavaScript中的分号是可选的。它说应该可以工作。
我个人比较支持使用分号,但是有一种备选方案也很有说服力,然而这种方案通常没有得到公正的发言机会。和所有编程风格争论一样,这将是一个永无止境的辩论,没有合理的结论。做出你和你的团队感觉更舒适的决定。
如果你选择采用节俭的分号方法,请确保你和你的团队充分了解自动分号插入(ASI)和语句终止规则。无论你做出什么决定,这都是必须理解的好事情。
关于代码压缩:如果你不想冒使用代码压缩工具存在漏洞的风险,以及因为它没有正确执行ASI而导致的报告和修复的负担(或等待修复),那么就不要依赖ASI。
var a=1,b=7,sum=a+b(a+b);
,number is not a function
。还有其他情况和这个情况。It makes your code vulnerable for bugs resulting from minification: Try:
var isTrue = true
function doSomething() { return 'yeah' }
function doSomethingElse() { return 'yes, dear' }
doSomething()
!isTrue && doSomethingElse()
minifies to:
var isTrue=true;function doSomething(){return "yeah"}function doSomethingElse(){return "yes, dear"}doSomething()!isTrue&&doSomethingElse();
which results in:
SyntaxError: Unexpected token !
It makes your code less readable and maintainable in terms of convenience: Using the semicolon has been rightfully established as good practice, and a trained JavaScript developer will be puzzled by code trying to evade the convention.
还有一件事,你必须问问自己:省略分号能得到什么好处呢?
结论:在缩小代码时,我肯定会尝试使用 JSLint 的惯例。我见过一些人在花费数小时试图修复未缩小的代码中不存在的 Bug 后最终对他们的 JavaScript 代码进行了 Lint。不要让自己遭受这种痛苦;分号可能乍一看有点丑陋,但它们可以避免 Bug。
不要这样做。分号插入是一件非常危险的事情。增加的大小并不值得承担额外的风险。
如果你这样做,Douglas Crockford 不会喜欢你 :) JavaScript: The Good Parts
在我看来,不要那样做。你并没有真正获得很多,而且分号是自动放置的,它可能被放置在一个会产生奇怪错误的地方。
;
键了!(因为尖锐的东西通常很锋利) - CaffGeek