我见过不同的开发者在javascript的函数后面加分号,也有一些没有。哪种是最佳实践?

function weLikeSemiColons(arg) {
   // bunch of code
};

or

function unnecessary(arg) {
  // bunch of code
}

当前回答

只要保持一致!它们不是必需的,但我个人使用它们,因为大多数缩小技术依赖于分号(例如,Packer)。

其他回答

JS Lint是事实上的惯例,它说函数体后没有分号。参见“分号”部分。

只要保持一致!它们不是必需的,但我个人使用它们,因为大多数缩小技术依赖于分号(例如,Packer)。

在函数声明后不需要分号。

FunctionDeclaration的语法在规范中是这样描述的:

function Identifier ( FormalParameterListopt ) { FunctionBody }

语法上不需要分号,但你可能想知道为什么?

分号用于将语句彼此分开,FunctionDeclaration不是语句。

函数声明在代码进入执行之前被求值,提升是用来解释这种行为的常用词。

术语“函数声明”和“函数语句”经常被错误地互换使用,因为ECMAScript规范中没有描述函数语句,但是有一些实现在它们的语法中包含了函数语句,尤其是Mozilla,但这也是非标准的。

但是,在使用FunctionExpressions时,总是建议使用分号。例如:

var myFn = function () {
  //...
};

(function () {
  //...
})();

如果你在上面的例子中省略了第一个函数后的分号,你将得到完全不希望看到的结果:

var myFn = function () {
  alert("Surprise!");
} // <-- No semicolon!

(function () {
  //...
})();

第一个函数将立即执行,因为围绕第二个函数的括号将被解释为函数调用的参数。

推荐讲座:

命名函数表达式解密(很棒的文章) 解释JavaScript封装的匿名函数语法(更多关于FunctionDeclaration vs FunctionExpression)

当我缩小我的脚本时,我意识到我需要对以等号开始的函数使用分号。如果你定义一个函数为var,是的,你需要使用分号。

需要分号

var x = function(){};
var x = new function(){};
this.x = function(){};

不需要分号

function x(){}

我在函数作为变量声明之后使用它们:

var f = function() { ... };

但不是在经典风格的定义之后:

function f() {
    ...
}