有人在函数声明后添加了分号,但有人没有。这是在函数声明后添加分号的好习惯吗?
function test(o) {
}
function test(o) {
};
有人在函数声明后添加了分号,但有人没有。这是在函数声明后添加分号的好习惯吗?
function test(o) {
}
function test(o) {
};
函数声明不需要(也不应该有)后面的分号:
function test(o) {
}
但是,如果您将函数编写为表达式,例如下面的变量初始化器,那么该语句应该以分号终止,就像任何其他语句一样:
var a = function test(o) {
};
查看有关构造函数与声明(语句)与表达式的更多信息。
实际发生的情况是您在函数之后添加了一个空语句。
function test (o) { return o; };
可以看作类似于:
var test = 0;;
第二个分号本身并不是一个错误。浏览器将其视为绝对没有发生任何事情的声明。
这里有两件事要记住。
这仅适用于函数声明和控制块(for/if/while/switch/etc)。
函数声明应该定义在你的作用域的底部,所以你不会遇到这样的问题:
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 () {}
}
这会很有效。
分号和函数声明:
function test(o) {
// body
} // semicolon no
var test = function (o) {
// body
}; // semicolon yes
有关格式化代码问题,请参阅JSLint。
不。
定义这样的函数时不需要分号。
但是,如果您定义这样的函数:
var test = function (o) {
}
这不是绝对必要的,但您可能想要使用它们,特别是如果您将函数放在一行上。
第一种方式定义了一个函数,而第二种方式将一个函数赋值给一个变量,因此是一个语句。大多数语句用分号分隔。定义函数可以被认为是一个常见的反例,因为没有多少人使用它们。
对于浏览器来说,这并不重要。就语义而言,仅在您对函数进行原型设计或使用函数语句时才重要。
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
定义函数时不需要分号,但加分号也不是错误。
但是有一个例外,如果您使用函数包装器并传递参数,则需要在其间添加分号,例如:
(function(v){alert(v)})('1');
(function(s){alert(s)})('0')
... Otherwise forget about them ...