好吧,首先我应该问一下这是否与浏览器有关。
我已经读到,如果找到了无效的令牌,但是代码段在该无效令牌之前一直有效,如果在该令牌之前加了换行符,则在该令牌之前插入一个分号。
但是,引用由分号插入引起的错误的常见示例是:
return
_a+b;
..似乎不遵循此规则,因为_a是有效令牌。
另一方面,分解呼叫链可以按预期工作:
$('#myButton')
.click(function(){alert("Hello!")});
是否有人对规则有更深入的描述?
首先,您应该知道哪些语句受自动分号插入(为简洁起见也称为ASI)的影响:
var
声明do-while
声明continue
声明break
声明return
声明throw
声明有关ASI的具体规则,请参见规范§11.9.1自动分号插入规则
描述了三种情况:
当遇到语法不允许的记号(LineTerminator
或}
)时,如果出现以下情况,将在其前插入分号:
LineTerminator
。}
例如 :
{ 1
2 } 3
转化为
{ 1
;2 ;} 3;
在NumericLiteral
1
满足所述第一条件,令牌是行终止如下。
在2
满足第二条件,令牌是以下}
。
例如 :
a = b
++c
转换为:
a = b;
++c;
限量生产:
UpdateExpression :
LeftHandSideExpression [no LineTerminator here] ++
LeftHandSideExpression [no LineTerminator here] --
ContinueStatement :
continue ;
continue [no LineTerminator here] LabelIdentifier ;
BreakStatement :
break ;
break [no LineTerminator here] LabelIdentifier ;
ReturnStatement :
return ;
return [no LineTerminator here] Expression ;
ThrowStatement :
throw [no LineTerminator here] Expression ;
ArrowFunction :
ArrowParameters [no LineTerminator here] => ConciseBody
YieldExpression :
yield [no LineTerminator here] * AssignmentExpression
yield [no LineTerminator here] AssignmentExpression
经典示例,带有ReturnStatement
:
return
"something";
转化为
return;
"something";
本文向大家介绍浅析Javascript的自动分号插入(ASI)机制,包括了浅析Javascript的自动分号插入(ASI)机制的使用技巧和注意事项,需要的朋友参考一下 前言 相信从事过C#和Java的大家都知道分号是用作断句(EOS,end of statement)的,而且必须加分号,否则编译就不通过了。但JavaScript由于存在ASI机制,因此允许我们省略分号。ASI机制不是说在解析过程中
尽管 JavaScript 有 C 的代码风格,但是它不强制要求在代码中使用分号,实际上可以省略它们。 JavaScript 不是一个没有分号的语言,恰恰相反上它需要分号来就解析源代码。 因此 JavaScript 解析器在遇到由于缺少分号导致的解析错误时,会自动在源代码中插入分号。 var foo = function() { } // 解析错误,分号丢失 test() 自动插入分号,解析器重
我正在学习/试验 Rust,在我发现的这门语言的所有优雅中,有一个特点让我感到困惑,似乎完全不合适。 Rust在进行方法调用时会自动取消对指针的引用。我做了一些测试来确定确切的行为: (游乐场) 所以,似乎或多或少: 编译器将插入调用方法所需的尽可能多的解引用运算符 编译器在解析使用<code>声明的方法时 确切的自动取消引用规则是什么?有人能给出这样一个设计决策的正式理由吗?
问题内容: 如您所知,ECMAscript会尝试变得聪明,如果您未明确编写 分号 ,则会自动插入 分号 。简单的例子 仍将按预期工作。但是,如果您依靠这一点,则有一些警告。如果我们像这样重写该函数 ..那个函数现在将返回,因为解释器将在语句之后插入分号(这就是为什么始终将大括号放在与语句相同的行上的原因)。 但是,了解了所有这些之后,我现在想知道在所有浏览器和版本中,如下所示的语句的 安全性 如何
我对drools和KIE服务器是新手。我遇到了一个问题,即如何通过触发规则RHS(then action)在工作记忆中插入新的事实,然后通过这些动态插入的事实激活其他规则。 我所期望的是,当BaseFeature从外部插入工作内存并激活RuleOne时,在RuleOne内部“然后”它将插入新的事实RuleResult,并希望激活RuleTwo,但它没有激活RuleTwo,只是RuleOne被激活了