为什么要在javascript中的每个函数之后使用分号?

我已经看到不同的开发人员在JavaScript中的函数之后包含分号,有些则没有。 哪个是最佳做法?

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

要么

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

函数声明之后的分号是没有必要的

说明书中描述了FunctionDeclaration的语法:

 function Identifier ( FormalParameterListopt ) { FunctionBody } 

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

分号用于将语句彼此分开, FunctionDeclaration 声明不是一个声明

FunctionDeclarations在代码进入执行之前被评估, 提升是用来解释这种行为的常用词

术语“函数声明”和“函数声明”经常被错误地交替使用,因为在ECMAScript规范中没有描述函数声明,但是有一些实现在语法中包括一个函数声明,特别是Mozilla,是非标准的。

但是,在使用FunctionExpressions情况下总是build议使用分号,例如:

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

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

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

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

推荐讲座:

  • 命名函数expression式被揭秘 (伟大的文章)
  • 解释JavaScript封装的匿名函数语法 (更多关于FunctionDeclarationFunctionExpression

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

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

但不是古典式的定义之后:

 function f() { ... } 

JS Lint是事实上的约定,它在函数体之后说没有分号。

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

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

我通常不会以分号结束函数声明,但这只是我的偏好。

浏览器将以任何方式运行,但也许有一天他们会拿出一些更严格的标准来pipe理这一点。

代码示例我会写:

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

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

我相当肯定,在每个语句之后不要放置分号会减慢内部parsing器的速度,因为它必须找出语句结尾的位置。 我希望我有一些方便的数字,你肯定地确认,但也许你可以自己谷歌。 🙂

另外,当你压缩或缩小代码时,缺less分号会导致你脚本的缩小版本不能做你想要的,因为所有的空白都消失了。

当我缩小我的脚本,我意识到function,开始等于马克我需要使用分号。 如果你定义一个函数为var,那么你需要使用分号。

需要分号

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

不需要分号

 function x(){}