我的妻子正在努力学习Codecademy (Javascript),分号让她很沮丧。她问我哪些行需要以分号结尾。她才刚刚开始,所以我不想在这里用“语句”、“表达式”等来吓到她。我只是告诉她不要用分号,毕竟这是JS ;)
那么我该怎么解释呢?
发布于 2012-08-28 07:10:06
if(test)之后,因为它会结束那件事(实际上-它不是无效的,你真的不想在这里结束它)。for(a;b;c)也是如此(但for中的每一个东西都是一个thing).x = 2 + 1 + 3 + 4 + 5 * 10 + 2;,否则你不会得到全部的和。即使超过三四行,你也希望它是一个单一的和-一个单一的thing.发布于 2012-08-28 07:55:48
简单的规则是所有语句都必须以分号结尾。像表达式、块和函数声明这样的东西不会以分号结尾。也许下面的内容会有所帮助。
块不会以分号结尾:
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发布于 2012-08-28 06:54:29
我的Javascript有点生疏了,但我相信你可以用:每一行,除非它已经以}或{结尾。然后,只需确保每条语句都在新的一行上,尽管给出了原始问题,我假设这不是问题。
而且不以分号结束行也不是一个好主意。在某些情况下,它实际上不会工作。
编辑
在几乎所有的情况下,它应该是好的,并且在另一个答案中发布的文章是关于它的很好的阅读,但是我仍然坚持我对分号的喜爱。
https://stackoverflow.com/questions/12150650
复制相似问题