3

我的妻子正在通过 Codecademy (Javascript) 工作,并且对分号感到沮丧。她问我哪些行需要以分号结尾。她才刚开始,所以我不想在这里用“陈述”、“表达”等来吓唬她​​。我只是告诉她不要理会分号,毕竟是 JS ;)

那我应该怎么解释呢?

4

3 回答 3

5
  1. 分号结束每一件事。
  2. 你不想要它,if(test)因为它会结束那件事(事实上 - 它不是无效的,你只是真的不想在那里结束它)。同样与for(a;b;c)(但里面的每一件事for 都是一个东西)。
  3. x = 2 + 1 + 3 + 4 + 5 * 10 + 2;是一个单一的东西,否则你就不会拥有全部金额。即使超过三四行,你也希望它是一个总和——一个单一的东西。
  4. 大括号将几件事组合成一件大事。由于它们已经是有目的的东西,所以它们不需要分号。但它不会受伤。
于 2012-08-27T23:10:06.417 回答
1

简单的规则是所有语句必须以分号结尾。诸如表达式、块和函数声明之类的东西不以分号结尾。也许以下有帮助。

块不以分号结尾:

if ( /*condition */ ) { // start of block, no semicolon
  ...                   // function body
}                       // end of block, no semicolon

其他块也是如此,例如do..whilewhilefor..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-27T23:55:47.700 回答
0

我的 Javascript 有点生疏,但我相信你可以摆脱:每一行,除非它已经以 } 或 { 结尾。然后只需确保每个语句都在新行上,尽管考虑到最初的问题,我认为这不是问题。

并且不以分号结束行是一个坏主意。在某些情况下它实际上不起作用。

编辑

在几乎所有情况下它都应该没问题,并且在另一个答案中发布的文章是一个很好的阅读,但是我仍然坚持我对分号的热爱*。

于 2012-08-27T22:54:28.720 回答