2012-08-15 841 views
16

Possible Duplicate:
JavaScript: When should I use a semicolon after curly braces?函数声明后是否需要分号?

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

function test(o) { 
} 

function test(o) { 
}; 
+3

这可能是相关的:[应该多行var f = function(){/ *代码* /}得到一个分号](http://stackoverflow.com/q/4515084/990877)。总结一下:在赋值表达式中声明函数时(即'var f = function(){}'),用';'关闭。 – PPvG 2012-08-15 23:27:57

回答

28

函数声明不需要(也不应该有),分号跟随它:

function test(o) { 
} 

但是,如果你写一个函数作为声明,像下面的变量初始化,然后该语句应该以分号结束,就像任何其他的说法应该是:

var a = function test(o) { 
}; 
3

定义这样一种功能,当你不需要分号号。

但是,如果像这样定义一个函数:

var test = function (o) { 
} 

这不是绝对必要的,但你可能想使用它们,特别是如果你把功能在同一行。

第一种方式定义了一个函数,但第二种方式将一个函数赋值给一个变量,因此是一个语句。大多数语句都是用分号分隔的。定义函数可以被认为是一个常见的反例,因为并不是很多人使用它们。

2

分号和函数声明:

function test(o) { 
    // body 
} // semicolon no 

var test = function (o) { 
    // body 
}; // semicolon yes 

请参阅JSLint来格式化代码问题。

+0

在第二种函数声明中也不需要使用分号。它运行后的代码没有任何问题。 – 2017-01-27 17:27:33

1

对浏览器来说,没关系。对于语义问题,只有在您正在对函数进行原型设计或使用函数声明时才重要。

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 
0

分号在定义函数时不是必需的,但是将其应用并不是错误。

一个例外不过,如果你使用的功能包装和传递的参数,你需要加分号,例如之间:

(function(v){alert(v)})('1'); 
(function(s){alert(s)})('0') 

... Otherwise forget about them ...

6

究竟发生了什么你是在函数后面添加一个空语句。

function test (o) { return o; }; 

可以被看作是相似于:

var test = 0;; 

即第二分号不是错误每本身。浏览器将其视为一个绝对没有任何事情发生的声明。

在这里有两件事要记住。

这适用ONLY起作用-声明和控制块(/ IF /同时/开关/等)。

函数的声明应该在你的范围的底部定义,这样你就不会遇到这样的问题:

function test() {} 
(function (window, document, undefined) { /* do stuff */ }(window, document)); 

因为浏览器会认为你的意思是function test() {}(/*return value of closure*/); 这是一个错误。一个非常糟糕和令人讨厌的错误,很容易忽略。

但没关系,因为函数声明可以在return语句下运行,并且仍然可以正常工作。

所以,即使你想去:

function doStuff() { 
    return (function() { /*process stuff*/ test(); }()); 
    function test() {} 
} 

这是去上班只是桃色。