函数声明后我们需要一个分号吗?

时间:2012-08-15 23:24:59

标签: javascript

  

可能重复:
  JavaScript: When should I use a semicolon after curly braces?

有人在函数声明后添加了分号,但有人没有。这是在函数声明后添加分号的好习惯吗?

function test(o) {
}

function test(o) {
};

6 个答案:

答案 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 ...