我的妻子正在通过Codecademy(Javascript)工作,并被分号感到沮丧。她问我哪些线需要以分号结束。她刚刚开始,所以我不想在这里用“陈述”,“表达”等吓唬。我只是告诉她不要打扰分号,这是JS后来的全部;)
那我该怎么解释呢?
答案 0 :(得分:5)
if(test)
之后,因为它结束那件事(事实上 - 它不是无效的,你真的不想在那里结束它)。与for(a;b;c)
类似(但for
中的每个内容都是一个东西)。x = 2 + 1 + 3 + 4 + 5 * 10 + 2;
是单一的,或者你没有全部金额。即使超过三四行,你也希望它只是一笔钱 - 一件事。答案 1 :(得分:1)
简单的规则是所有语句必须以分号结尾。表达式,块和函数声明之类的东西不以分号结尾。也许以下有帮助。
块不以分号结尾:
if ( /*condition */ ) { // start of block, no semicolon
... // function body
} // end of block, no semicolon
其他块也是如此,例如 do..while , while , for..in 等等。< / p>
函数声明没有分号(它们使用块):
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
请注意,函数表达式可以只是表达式。
e.g。函数调用传递调用函数表达式的结果(注意函数表达式体中的分号终止语句):
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
答案 2 :(得分:0)
我的Javascript有点生疏,但我相信你可以逃脱: 每一行,除非它已经以}或{结尾。然后确保每个语句都在一个新的行上,但考虑到原始问题我假设它不是问题。
而不是以冒号结尾的行是一个坏主意。在某些情况下,它实际上无法正常工作。
几乎在所有情况下它都应该没问题,并且在另一个答案中发表的文章对它有很好的解读,但是我仍然坚持我对半冒号的热爱*。