可能重复:
JavaScript: When should I use a semicolon after curly braces?
有人在函数声明后添加了分号,但有人没有。这是在函数声明后添加分号的好习惯吗?
function test(o) {
}
function test(o) {
};
答案 0 :(得分:32)
函数声明不需要(也不应该)有一个分号:
function test(o) {
}
但是,如果您将函数编写为语句,就像下面的变量初始化程序一样,那么语句应该以分号结束,就像任何其他语句一样:
var a = function test(o) {
};
答案 1 :(得分:6)
实际发生的是你在函数后添加一个空语句。
function test (o) { return o; };
可以被视为类似于:
var test = 0;;
第二个分号不是 错误 本身。浏览器将其视为一种绝对没有发生任何事情的声明。
这里要记住两件事。
这将 ONLY 应用于函数声明和控制块(对于/ if / while / switch / etc)。
函数声明应该在范围的底部定义,所以你不会遇到这样的问题:
function test () {}
(function (window, document, undefined) { /* do stuff */ }(window, document));
因为浏览器会假设您的意思是function test() {}(/*return value of closure*/);
这是一个错误。一个非常糟糕和令人讨厌的错误很容易被忽视。
但是没关系,因为函数声明可以在返回语句下进行,但仍然可以正常工作。
所以,即使你想去:
function doStuff () {
return (function () { /*process stuff*/ test(); }());
function test () {}
}
这只会起作用。
答案 2 :(得分:3)
没有
定义类似的函数时不需要分号。
但是,如果你定义一个这样的函数:
var test = function (o) {
}
这不是绝对必要的,但您可能想要使用它们,特别是如果您将功能放在一行上。
第一种方式定义了一个函数,但第二种方式是将函数赋给变量,因此是一个语句。大多数语句都以分号分隔。定义函数可以被认为是一个常见的反例,因为没有多少人使用它们。
答案 3 :(得分:2)
分号和函数声明:
function test(o) {
// body
} // semicolon no
var test = function (o) {
// body
}; // semicolon yes
有关格式化代码问题,请参阅JSLint。
答案 4 :(得分:2)
对浏览器来说,没关系。对于语义问题,只有在对函数进行原型设计或使用函数语句时才有意义。
function stuff(stuff) {
alert(stuff);
} //don't need a semicolon
Object.prototype.stuff = function(stuff) {
alert(stuff);
}; //need a semicolon
var stuff = function(stuff) {
alert(stuff);
}; //need a semicolon
答案 5 :(得分:0)
定义函数时不需要分号,但是将它打开也不是错误。
但有一个例外,如果您使用函数包装器并传递参数,则需要在其间添加分号,例如:
(function(v){alert(v)})('1');
(function(s){alert(s)})('0')
... Otherwise forget about them ...