1

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

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

4 回答 4

5

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

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

函数后面的分号不是“可选的”,它完全是多余的。

至于实际可选的,它们之所以如此,是因为在大多数情况下,Javascript 会在换行符之前添加分号。这些你应该明确地写出来。您迟早会被缺少自动分号所困扰。

于 2013-03-01T18:23:14.913 回答
3

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

这工作正常:

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

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

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

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

例子:

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

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

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

但是在函数定义之后仍然不需要分号。

于 2013-03-01T18:37:31.313 回答
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();
于 2013-03-01T18:22:45.760 回答
-1

没有必要,但风格很好。但是,当使用删除无关空格、缩短变量等的缩小器时,遗漏的分号通常会出现问题。

于 2013-03-01T18:43:52.860 回答