我正在尝试决定是否值得使用JavaScript无分号样式。
如果我有没有分号的JavaScript代码:
function(){
var first = 1
var second = 2
sum = 1 + 2
return sum
}
它可以在浏览器和Node.js中使用。
但是会缩小(通过Uglify或Closure Compiler)代码在浏览器和Node.js中工作吗?
我已阅读文章 Semicolons in JavaScript are optional 。它说它应该有效。
答案 0 :(得分:25)
我个人是一个支持分号的家伙,但是替代方案有一个令人信服的论据,通常不是given a fair voice。与所有编码风格的论点一样,这将是一场永无止境的辩论,没有合理的结论。做你和你的团队感觉更舒服的事情。
如果您采用节俭的分号方法,请确保您和您的团队正确理解automatic semicolon insertion(ASI)和语句终止规则。无论你的决定是什么,这都是一件好事。
关于缩小:如果你不想冒一个minifier bug的潜在头痛的风险以及报告和修复它(或等待修复)的相关负担,因为它没有正确地进行ASI,那么就不要依靠ASI。
答案 1 :(得分:6)
尽管JavaScript中的分号是可选的,但强烈建议不要使用分号:
它使您的代码容易受到因删除空格而导致的错误的影响(用于缩小):试试这个:
var a = 1; var b = 7; var sum = a + b (a + b)
它缩小为,这将导致错误var a=1,b=7,sum=a+b(a+b);
,number is not a function
。还有other cases和this case。
更新:此错误不是由缩小造成的,但下一个是:
它使您的代码容易受到缩小导致的错误的影响:尝试:
var isTrue = true
function doSomething() { return 'yeah' }
function doSomethingElse() { return 'yes, dear' }
doSomething()
!isTrue && doSomethingElse()
缩小为:
var isTrue=true;function doSomething(){return "yeah"}function doSomethingElse(){return "yes, dear"}doSomething()!isTrue&&doSomethingElse();
导致:
SyntaxError: Unexpected token !
它使您的代码在方便性方面的可读性和可维护性降低:使用分号已被正确地建立为良好实践,并且训练有素的JavaScript开发人员会被试图逃避约定的代码所迷惑。
另一件事是,你必须问自己:你真正得到的是省略分号?
底线:通过缩小,我肯定会尝试使用JSLint的约定。我看到有些人在经过几个小时的尝试修复一个没有发生错误的错误,但是在缩小的代码中,最终会发现他们的JavaScript代码。不要把自己置于这种苦难之中;分号一见钟情可能很难看,但是它们可以防止错误。
答案 2 :(得分:2)
编译器和缩放器可能足够智能,可以根据需要添加分号(如果它有助于缩小过程)。
然而!分号告诉解释器这是语句的结束。如果它丢失了,它必须查看下一行的开头,以确定该语句是否有意义继续。然后它将决定,如果下一行是一个新语句(即分号丢失),或者它实际上是前一行语句的延续。
没有分号,你放慢了速度!更不用说当执行我描述的算法的解释器决定错误时,这可能会引入一些模糊的错误!
答案 3 :(得分:1)
不要这样做。分叉插入是一件非常危险的事情。尺寸增加不值得增加风险。
如果你这样做,杜拉斯克罗克福德不会喜欢你:) http://youtu.be/hQVTIJBZook答案 4 :(得分:-1)