为什么我应该在javascript中的每个函数后使用分号?

时间:2009-12-02 17:51:51

标签: javascript syntax

我见过不同的开发人员在javascript函数之后包含分号,而有些则没有。哪种是最佳做法?

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

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

9 个答案:

答案 0 :(得分:412)

函数声明后的分号

FunctionDeclaration的语法在the specification中描述为:

function Identifier ( FormalParameterListopt ) { FunctionBody }

语法上没有分号,但可能想知道为什么?

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

代码执行之前

FunctionDeclarations被评估hoisting是用于解释此行为的常用词

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

但是,建议您在使用FunctionExpressions的地方使用分号,例如:

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

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

如果在上例中的第一个函数之后省略分号,则会得到完全不希望的结果:

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

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

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

推荐讲座:

答案 1 :(得分:38)

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

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

但不符合古典风格的定义:

function f() {
    ...
}

答案 2 :(得分:20)

JS Lint是事实上的约定,并且在函数体之后没有分号。请参阅“Semicolon”部分。

答案 3 :(得分:7)

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

答案 4 :(得分:5)

真的只是取决于你的偏好。我喜欢用半冒号结束代码行,因为我已经习惯了Java,C ++,C#等,所以我在javascript中使用相同的标准进行编码。

我通常不会在半冒号中结束函数声明,但这只是我的偏好。

浏览器会以任何一种方式运行它,但也许有一天它们会提出一些更严格的标准来管理它。

我写的代码示例:

function handleClickEvent(e)
{
     // comment
     var something = true;  // line of code
     if (something)  // code block
     {
        doSomething();  // function call
     }
}

答案 5 :(得分:3)

这实际上不仅仅是一个惯例或一致性的问题。

我很确定在每个语句减慢内部解析器之后放置分号,因为它必须弄清楚语句结束的位置。我希望我有一些方便的数字让你积极确认,但也许你可以自己谷歌。 :)

此外,当您压缩或缩小代码时,缺少分号会导致脚本的缩小版本无法执行您想要的操作,因为所有空白区域都会消失。

答案 6 :(得分:1)

当我缩小我的脚本时,我意识到我需要使用分号来表示以等号开头的函数。如果将函数定义为var,则需要使用分号。

需要分号

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

不需要分号

function x(){}

答案 7 :(得分:0)

<强> SIMPLE:

最好在函数括号结束后留下分号;。多年来,它们被认为是最佳实践。

始终使用它们的一个好处是,如果您想缩小JavaScript。

缩小Javascript,有助于减少文件大小。

但至于上面的最佳做法和答案,不建议在功能标签之后使用它。

如果你不使用分号,并且如果你想缩小(就像许多开发人员喜欢做的话,如果他们的网站提供大量的JavaScript),你可能会得到各种各样的错误/警告。

答案 8 :(得分:0)

不需要功能后的分号 是否使用它,不会导致程序错误。 但是,如果您打算精简代码,则在函数后使用分号是个好主意。 例如说您有以下代码

//file one
var one=1;
var two=2;
function tryOne(){}
function trytwo(){}

//file two
var one=1;
var two=2;
function tryOne(){};
function trytwo(){};

当两者都缩小时,您将获得以下输出

请注意,注释仅供参考

//file one
var one=1;var two=2;function tryOne(){}
function trytwo(){}

//file two
var one=1;var two=2;function tryOne(){};function trytwo(){};