Answers:
分号后函数的声明是没有必要的。
a的语法FunctionDeclaration
在规范中描述为:
function Identifier ( FormalParameterListopt ) { FunctionBody }
语法上没有分号,但是可能想知道为什么?
分号用于将语句彼此分开,并且a FunctionDeclaration
不是语句。
FunctionDeclarations
在代码执行之前进行评估,起吊是用来解释这种行为的常用词。
术语“函数声明”和“函数声明”通常会错误地互换使用,因为ECMAScript规范中没有描述函数声明,但是有一些实现在其语法中包括函数声明,特别是Mozilla,但同样是非标准的。
但是,始终建议在使用的地方使用分号FunctionExpressions
,例如:
var myFn = function () {
//...
};
(function () {
//...
})();
如果在上面的示例中的第一个函数之后省略分号,则将得到完全不希望的结果:
var myFn = function () {
alert("Surprise!");
} // <-- No semicolon!
(function () {
//...
})();
第一个功能将立即执行,因为第二个功能的括号将被解释为Arguments
函数调用的。
推荐讲座:
FunctionDeclaration
vs的更多信息FunctionExpression
)我在函数变量声明后使用它们:
var f = function() { ... };
但不遵循古典风格的定义:
function f() {
...
}
JS Lint实际上是约定俗成的,它说在函数体之后没有分号。请参阅“分号”部分。
真的只是取决于您的喜好。我喜欢用半冒号结束代码行,因为我已经习惯了Java,C ++,C#等,因此我使用相同的标准来编写javascript。
我通常不会以半冒号结尾函数声明,但这只是我的偏爱。
浏览器将以任何一种方式运行它,但是也许有一天他们会提出一些更严格的标准来管理它。
我会写的代码示例:
function handleClickEvent(e)
{
// comment
var something = true; // line of code
if (something) // code block
{
doSomething(); // function call
}
}
实际上,这不仅仅是一个约定或一致性问题。
我相当确定,在每个语句后不放置分号会使内部解析器变慢,因为它必须弄清楚语句结尾在哪里。希望我能提供一些方便的数字,让您肯定地确认这一点,但是也许您可以自己用Google搜索。:)
另外,在压缩或压缩代码时,缺少分号可能会导致脚本的缩小版本无法实现您想要的功能,因为所有空白都消失了。
使用功能后的分号不需要使用或不使用它,不会在程序中引起错误。但是,如果您打算精简代码,则在函数后使用分号是个好主意。例如说你有下面的代码
//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(){};