JavaScript函数声明中的分号是否必要

时间:2013-03-01 18:19:24

标签: javascript

是否有必要在函数定义的末尾添加分号,如下所示

function helloWorld() {
     //some code 
}; //note the semicolon here at the end is it ever necessary? Ever

我有一个发誓这是可选的朋友。我认为它绝不是可选的我从来没有读过任何关于它在函数末尾是可选的东西。我从来没有见过任何人做过“除了他”。半结肠是否可选。

var hellWorld = function (){

}; // the semicolon here it is optional because you are defining a variable this is OK and optional 

4 个答案:

答案 0 :(得分:5)

分号分隔表达式。您可以在一个分号后添加任意数量的分号,因为它们将分隔空语句。

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

该函数后面的分号不是“可选的”,这显然是多余的。

至于实际可选的那些,它们是这样的,因为在大多数情况下,Javascript将在换行符之前添加分号。这些明确写入。你迟早会被缺少自动分号所困扰。

答案 1 :(得分:3)

在这种情况下,是的,不需要它。

这很好用:

function foo() {} var x = "hi";

然而,这是一个语法错误:

var foo = function() {} var x = "hi";

}之后使用换行符或使用分号可以没问题。你不需要两者 - 如果程序在没有它的情况下无效,通常会在换行符或右括号之前插入分号。但在某些情况下,程序仍然 有效但没有它,但意味着别的东西。所以你必须小心依靠分号插入。

示例:

var x = "foo"
/foo/.test(x)

这里我想在第一行末尾插入分号,但是因为我的RegEx中的/也可能是一个除法运算符而被烧毁。所以没有分号插入。当你到达.时这是无效的这一事实并不能保存你,var x = "foo" /是一个有效的程序片段,所以没有分号插入。

这就是为什么有人说“永远不要依赖于分号插入”。

但是在功能定义之后你仍然不需要分号。

答案 2 :(得分:0)

不是必需的。它是隐含插入的,但依赖于隐式插入可能会导致细微的,难以调试的问题。不要这样做。你比那更好。

有几个地方缺少分号特别危险:

// 1.
MyClass.prototype.myMethod = function() {
  return 42;
}  // No semicolon here.

(function() {
  // Some initialization code wrapped in a function to create a scope for locals.
})();


var x = {
  'i': 1,
  'j': 2
}  // No semicolon here.

// 2.  Trying to do one thing on Internet Explorer and another on Firefox.
// I know you'd never write code like this, but throw me a bone.
[normalVersion, ffVersion][isIE]();


var THINGS_TO_EAT = [apples, oysters, sprayOnCheese]  // No semicolon here.

// 3. conditional execution a la bash
-1 == resultOfOperation() || die();

答案 3 :(得分:-1)

没必要,但风格很好。但是当使用 minifier 去除无关的空白区域时,缩短变量等等,遗漏分号通常会产生问题。