解释分号的简单方法

时间:2012-08-27 22:49:12

标签: javascript

我的妻子正在通过Codecademy(Javascript)工作,并被分号感到沮丧。她问我哪些线需要以分号结束。她刚刚开始,所以我不想在这里用“陈述”,“表达”等吓唬。我只是告诉她不要打扰分号,这是JS后来的全部;)

那我该怎么解释呢?

3 个答案:

答案 0 :(得分:5)

  1. 半冒号结束每件事。
  2. 你不希望它在if(test)之后,因为它结束那件事(事实上 - 它不是无效的,你真的不想在那里结束它)。与for(a;b;c)类似(但for中的每个内容都是一个东西)。
  3. x = 2 + 1 + 3 + 4 + 5 * 10 + 2;是单一的,或者你没有全部金额。即使超过三四行,你也希望它只是一笔钱 - 一件事。
  4. Braces将一些事情归为一件大事。因为它们已经结束了,所以它们不需要分号。但它不会受到伤害。

答案 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有点生疏,但我相信你可以逃脱: 每一行,除非它已经以}或{结尾。然后确保每个语句都在一个新的行上,但考虑到原始问题我假设它不是问题。

而不是以冒号结尾的行是一个坏主意。在某些情况下,它实际上无法正常工作。

修改

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