一般不需要加分号。特殊场景下换行不加分号会出问题。 《google javascript代码风格指南》是这样建议的: 每一语句的结尾都要加上分号噢。 如果不加分号JS解释器也会按隐式分隔的标准去执行,但那样调试、压缩、合并的时候都很不方便。不要那样做嘛你可以做的更好的不是么。 而且在某些情况下,不写分号可是很危险的。 原因: JS语句以分号作为结束符使得JS解释器解析,如果省略分号,就会由JS解释器确定语句的结尾。尼玛,不是在很明确的情况下,它能确定么?上面几个例子里,都是在语句中声明了/函数/对象/数组,但闭括号("}"或"]")并不代表着结束。如果下一个语句开始是一个中缀或括号运算符,那JS就永远不会结束声明。 注:加上分号可以增进代码的性能,这样解析器就不必再计算插入分号的位置。 解释: 现代js绝大多数时候确实不是必须要写分号,只有特殊场景不写分号才会出问题。 如果不适用分号,编译代码时就会依靠语句间隐式的分割,可能会造成细微的调试的问题,千万不要这样做,很多时候不写分号是很危险的:
// 1.
MyClass.prototype.myMethod = function() {
return 42;
} // 这里没有分号.
(function() {
// 一些局部作用域中的初始化代码
})();
var x = {
'i': 1,
'j': 2
} //没有分号.
// 2. 试着在IE和firefox下做一样的事情.
//没人会这样写代码,别管他.
[normalVersion, ffVersion][isIE]();
var THINGS_TO_EAT = [apples, oysters, sprayOnCheese] //这里没有分号
// 3. 条件语句
-1 == resultOfOperation() || die();
1、js错误。返回42的函数运行了,因为后面有一对括号,而且传入的参数是一个方法,然后返回的42被调用,导致出错了。
2、你可能会得到一个“no sush property in undefined”的错误,因为在执行的时候,解释器将会尝试执行 x[normalVersion, ffVersion][isIE]() 这个方法。
3、die 这个方法只有在 resultOfOperation() 是 NaN 的时候执行,并且 THINGS_TO_EAT 将会被赋值为 die() 的结果。
这是因为js语句要求以分号结尾,除非能够正确地推断分号的位置。在这个例子当中,函数声明、对象和数组字面量被写在了一个语句当中。右括号(”)”、”}”、”]”)不足以证明这条语句已经结束了,如果下一个字符是运算符或者”(”、”{”、”[”,js将不会结束语句,所以一定要确保用分号结束语句。
函数表达式后面要分号结束,但是函数声明就不需要。例如:
var foo = function() {
return true;
}; // 这里要分号
function foo() {
return true;
} // 这里不用分号