国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

淺析Javascript的自動分號插入(ASI)機制

2024-05-06 15:09:02
字體:
來源:轉載
供稿:網友

前言

相信從事過C#和Java的大家都知道分號是用作斷句(EOS,end of statement)的,而且必須加分號,否則編譯就不通過了。但JavaScript由于存在ASI機制,因此允許我們省略分號。ASI機制不是說在解析過程中解析器自動把分號添加到代碼中,而是說解析器除了分號還會以換行為基礎按一定的規則作為斷句的依據,從而保證解析的正確性。

規范理論

es5 標準定義了自動分號插入規則,包括以下三個基本規則加兩個前置條件:

前置條件

1、如果插入分號后解析結果是空語句,那么不會自動插入分號。

例子:(空語句,else 前不加分好)

if (a > b) else c = d 

2、如果插入分號后它成為 for 語句頭部的兩個分號之一,那么不會自動插入分號。

例子:(不會加分號)

for (a; b )

基本規則

左到右解析程序,當遇到一個不符合任何文法產生式的 token(叫做 違規 token(offending token)),那么只要滿足下面條件之一就在違規 token 前面自動插入分號。

     1、至少一個 LineTerminator 分割了違規 token 和前一個 token

     2、違規 token 是 }。

例子:(1、2不符合任何產生式,并且之間存在 LineTerminator,因此在違規 token 2前加了分好,2和}則是因為違規 token 是 }所以加了分號)

{ 12 } 3 
{ 1;2 ;} 3;

左到右解析程序,tokens 輸入流已經結束,當解析器無法將輸入 token 流解析成單個完整 ECMAScript 程序 ,那么就在輸入流的結束位置自動插入分號。

對于受限產生式,也就是下面的5個,我們把產生式 [no LineTerminator here]后面的 token 叫做受限 token,如果在 token 和 受限 token 間存在了至少一個 LineTerminator,那么會在受限 token 前自動加上 token

受限的產生式只限如下5個:

PostfixExpression : 

LeftHandSideExpression [no LineTerminator here] ++ LeftHandSideExpression [no LineTerminator here] -- 

ContinueStatement : 

continue [no LineTerminator here] Identifier; 

BreakStatement : 

break [no LineTerminator here] Identifier; 

ReturnStatement : 

return [no LineTerminator here] Expression; 

ThrowStatement : throw [no LineTerminator here] Expression; 

歸納

避免 ASI 帶來的問題

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 溧水县| 含山县| 平阴县| 霸州市| 宁都县| 万盛区| 平舆县| 扶绥县| 策勒县| 出国| 阿合奇县| 新津县| 海南省| 湟中县| 旬邑县| 雅安市| 二手房| 康定县| 绥芬河市| 抚远县| 六枝特区| 北票市| 宜城市| 乌苏市| 黎川县| 普安县| 阿克| 滨州市| 渝中区| 陇川县| 纳雍县| 合作市| 河津市| 滦平县| 迁西县| 司法| 天门市| 阿巴嘎旗| 洮南市| 嘉义市| 文成县|