如何在javascript中调用函数而不用;
例如
让我们说testMethod在某个地方宣布....
testMethod();
testMethod() // without semicolon will still work.
还调用元素中的方法 示例
<input type="button" onclick="testMethod();" />
<input type="button" onclick="testMethod()" /> // again no semicolon.
答案 0 :(得分:29)
这是一项名为“自动分号插入”(或ASI)的功能。
来自Dealing with JavaScript's Automatic Semicolon Insertion
那么这些分号是如何为您插入的?遵循这些规则 (从ECMA-262第3版,7.9.1转述和简化):
- 当解析程序时,遇到任何语法产生不允许的令牌(称为违规令牌),如果出现以下一种或多种情况,则会在违规令牌之前自动插入分号是真的:
- 违规令牌通过至少一个LineTerminator与前一个令牌分开。
- 违规令牌是}。
- 结束的时候 遇到令牌输入流,解析器无法将输入令牌流解析为单个完整程序,然后在输入流的末尾自动插入分号。
- 当某些语法生成允许时,令牌是受限制的令牌,但是生产是限制生产,令牌将是注释后面的终端或非终端的第一个令牌“[此处没有LineTerminator] “在生产中。
如果此外,受限制的令牌与前一个令牌至少由一个LineTerminator分隔,则会在受限制的令牌之前自动插入分号。
...
答案 1 :(得分:1)
因为JavaScript引擎认为它们应该在那里,所以它会在行尾放置分号。这通常会引入错误而不是避免错误:
return
{
user: 'foo'
}
上面的return语句返回...... nothing:
return;
{
user: 'foo'
}
答案 2 :(得分:1)
javascript解释器将为您添加分号。省略分号是一个非常糟糕的主意,因为它可能导致解释的javascript行为与你期望的不同。
请参阅wikipedia上的例子:
return
a + b;
// Returns undefined. Treated as:
// return;
// a + b;
相关:
Do you recommend using semicolons after every statement in JavaScript?