我的妻子正在通过 Codecademy (Javascript) 工作,并且对分号感到沮丧。她问我哪些行需要以分号结尾。她才刚开始,所以我不想在这里用“陈述”、“表达”等来吓唬她。我只是告诉她不要理会分号,毕竟是 JS ;)
那我应该怎么解释呢?
我的妻子正在通过 Codecademy (Javascript) 工作,并且对分号感到沮丧。她问我哪些行需要以分号结尾。她才刚开始,所以我不想在这里用“陈述”、“表达”等来吓唬她。我只是告诉她不要理会分号,毕竟是 JS ;)
那我应该怎么解释呢?
if(test)
因为它会结束那件事(事实上 - 它不是无效的,你只是真的不想在那里结束它)。同样与for(a;b;c)
(但里面的每一件事for
都是一个东西)。x = 2 + 1 + 3 + 4 + 5 * 10 + 2;
是一个单一的东西,否则你就不会拥有全部金额。即使超过三四行,你也希望它是一个总和——一个单一的东西。简单的规则是所有语句必须以分号结尾。诸如表达式、块和函数声明之类的东西不以分号结尾。也许以下有帮助。
块不以分号结尾:
if ( /*condition */ ) { // start of block, no semicolon
... // function body
} // end of block, no semicolon
其他块也是如此,例如do..while、while、for..in等。
函数声明没有分号(它们使用块):
function foo() { // start of block
... // code, may be statements with semicolons and more blocks
} // end of block, no semicolon
看起来像块但不是的东西:
// Object literal isn't a block, it's a statement so uses {}
var obj = {name: 'fred', sex: 'male'};
// Object literal over several lines has one semicolon at the end
var obj = {
name: 'fred',
sex: 'male'
};
作为语句的函数表达式:
(function(){...}()); // expression in (), the
// terminating semicolon makes it a statement
超过几行:
(function(){ // Start of block (function body) doesn't use semicolon
...
}() // block end, no semicolon. Can't end statement here
// (unbalanced parenthesis) so no semicolon after ()
); // but end of statement does need semicolon
请注意,函数表达式可以只是表达式。
例如,函数调用传递调用函数表达式的结果(注意函数表达式主体中的分号终止语句):
foo( (function(){alert('hey'); return 'ho';}()) );
function foo(s) {
alert(s);
}
要测试是否需要分号,请删除两行代码之间的换行符:
var a = 'foo';
alert(a);
删除换行符:
var a = 'foo'; alert(a); // works
删除分号:
var a = 'foo' alert(a); // fails
我的 Javascript 有点生疏,但我相信你可以摆脱:每一行,除非它已经以 } 或 { 结尾。然后只需确保每个语句都在新行上,尽管考虑到最初的问题,我认为这不是问题。
并且不以分号结束行是一个坏主意。在某些情况下它实际上不起作用。
在几乎所有情况下它都应该没问题,并且在另一个答案中发布的文章是一个很好的阅读,但是我仍然坚持我对分号的热爱*。