成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

JS分號(hào)自動(dòng)插入的ASI機(jī)制

sunny5541 / 504人閱讀

摘要:規(guī)范理論標(biāo)準(zhǔn)定義了自動(dòng)分號(hào)插入規(guī)則,包括以下三個(gè)基本規(guī)則加兩個(gè)前置條件前置條件如果插入分號(hào)后解析結(jié)果是空語(yǔ)句,那么不會(huì)自動(dòng)插入分號(hào)。

規(guī)范理論

es5 標(biāo)準(zhǔn)定義了自動(dòng)分號(hào)插入規(guī)則,包括以下三個(gè)基本規(guī)則加兩個(gè)前置條件:

前置條件

1、如果插入分號(hào)后解析結(jié)果是空語(yǔ)句,那么不會(huì)自動(dòng)插入分號(hào)。

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

if (a > b)
else c = d

2、如果插入分號(hào)后它成為 for 語(yǔ)句頭部的兩個(gè)分號(hào)之一,那么不會(huì)自動(dòng)插入分號(hào)。

例子:(不會(huì)加分號(hào))

for (a; b
)

基本規(guī)則

左到右解析程序,當(dāng)遇到一個(gè)不符合任何文法產(chǎn)生式的 token(叫做 違規(guī) token(offending token)),那么只要滿足下面條件之一就在違規(guī) token 前面自動(dòng)插入分號(hào)。

 1、至少一個(gè) LineTerminator 分割了違規(guī) token 和前一個(gè) token。

 2、違規(guī) token 是 }。

例子:(1、2不符合任何產(chǎn)生式,并且之間存在 LineTerminator,因此在違規(guī) token 2前加了分好,2和}則是因?yàn)檫`規(guī) token 是 }所以加了分號(hào))

{ 1
2 } 3

{ 1
;2 ;} 3;

左到右解析程序,tokens 輸入流已經(jīng)結(jié)束,當(dāng)解析器無(wú)法將輸入 token 流解析成單個(gè)完整 ECMAScript 程序 ,那么就在輸入流的結(jié)束位置自動(dòng)插入分號(hào)。

對(duì)于受限產(chǎn)生式,也就是下面的5個(gè),我們把產(chǎn)生式 [no LineTerminator here]后面的 token 叫做受限 token,如果在 token 和 受限 token 間存在了至少一個(gè) LineTerminator,那么會(huì)在受限 token 前自動(dòng)加上 token。

受限的產(chǎn)生式只限如下5個(gè):

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 帶來(lái)的問(wèn)題

 1、后綴運(yùn)算符 ++ 或 -- 和它的操作數(shù)應(yīng)該出現(xiàn)在同一行。

 2、return 或 throw 語(yǔ)句的表達(dá)式開始位置應(yīng)該和 return 或 throw token 同一行。

 3、break 或 continue 語(yǔ)句的標(biāo)示符應(yīng)該和 break 或 continue token 同一行。

何時(shí)加分號(hào)

無(wú)分號(hào)黨想要不加分號(hào),那么就需要知道什么時(shí)候應(yīng)該要加分號(hào)。網(wǎng)上的一篇文章歸納了 NO ASI 并且會(huì)出現(xiàn)錯(cuò)誤的幾種情況,在這幾種情況下我們是要加分號(hào)的。下面是對(duì)應(yīng)的描述:

在以 ([/+- 開頭的語(yǔ)句前加分號(hào)(由于正常寫法均不會(huì)出現(xiàn)以 .,*% 作為語(yǔ)句開頭,因此只需記住前面5個(gè)即可,你看能懶則懶哦)

不過(guò)這里只考慮了換行的情況,其實(shí) ASI 還存在不換行的情況,這就要根據(jù)標(biāo)準(zhǔn)里的三條規(guī)則行事了!

知道了這點(diǎn),其實(shí)我們就可以省略大部分的分號(hào)了。但是也不強(qiáng)求,因?yàn)檫@還是要根據(jù)個(gè)人習(xí)慣以及團(tuán)隊(duì)風(fēng)格走的。

小補(bǔ)充

為什么自執(zhí)行函數(shù)前要加分號(hào)?

主要是應(yīng)對(duì)代碼合并壓縮時(shí),由于缺少分號(hào);帶來(lái)的錯(cuò)誤。知道了上面的規(guī)則,在 ( 開頭的行前加分號(hào)就可以避免錯(cuò)誤了。

原文地址:https://www.jb51.net/article/...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/96448.html

相關(guān)文章

  • JavaScript ASI 機(jī)制詳解

    摘要:最近在清理的未讀列表,看到了才知道了的,一種自動(dòng)插入分號(hào)的機(jī)制。這種行為被叫做自動(dòng)插入分號(hào),簡(jiǎn)稱。不過(guò)在省略分號(hào)的風(fēng)格中,這種解析特性會(huì)導(dǎo)致一些意外情況。規(guī)則標(biāo)準(zhǔn)定義的包括三條規(guī)則和兩條例外。規(guī)則一情況三就是為量身定做的。 TL;DR 最近在清理 Pocket 的未讀列表,看到了 An Open Letter to JavaScript Leaders Regarding Semico...

    frontoldman 評(píng)論0 收藏0
  • JavaScript中分號(hào)自動(dòng)插入

    摘要:中分號(hào)自動(dòng)插入轉(zhuǎn)譯自鏈接描述在中,分號(hào)自動(dòng)插入機(jī)制允許在一行代碼結(jié)尾省略分號(hào)。比如分號(hào)自動(dòng)插入規(guī)則分號(hào)插入只是一個(gè)術(shù)語(yǔ)。如果在這些位置遇到換行了,分號(hào)將被插入。 JavaScript中分號(hào)自動(dòng)插入 轉(zhuǎn)譯自:鏈接描述在JavaScript中,分號(hào)自動(dòng)插入機(jī)制允許在一行代碼結(jié)尾省略分號(hào)。你應(yīng)該養(yǎng)成一直書寫分號(hào)的習(xí)慣,與此同時(shí)掌握J(rèn)avaScript分號(hào)省略處理機(jī)制是十分重要的。因?yàn)檫@不僅有...

    dadong 評(píng)論0 收藏0
  • 備胎自我修養(yǎng)——趣談 JavaScript 中 ASI (Automatic Semicolon

    摘要:行結(jié)束符之后的符號(hào)有二義性,使得該符號(hào)與上條語(yǔ)句能夠無(wú)縫對(duì)接,不導(dǎo)致語(yǔ)法錯(cuò)誤。然而在中,有幾種特殊語(yǔ)句是不允許行結(jié)束符存在的。如果語(yǔ)句中有行結(jié)束符,會(huì)優(yōu)先認(rèn)為行結(jié)束符表示的是語(yǔ)句的結(jié)束,這在標(biāo)準(zhǔn)中稱為限制產(chǎn)生式。 showImg(https://segmentfault.com/img/bVmyZB); 什么是 ASI ? 自動(dòng)分號(hào)插入 (automatic semicolon i...

    _ipo 評(píng)論0 收藏0
  • javascript代碼風(fēng)格指北

    摘要:這段代碼工作正常,盡管沒有用分號(hào)在某些場(chǎng)景下是很管用的,特別是,有時(shí)候可以幫助減少代碼錯(cuò)誤。比如不好的寫法盡管這段代碼能正常工作,但代碼中我們應(yīng)盡量避免使用。前言 在我們平時(shí)工作中寫代碼是最頻繁的事情了,但我們的代碼真的好看嗎? 預(yù)計(jì)本文閱讀時(shí)間(10分鐘) 正文 1.1--語(yǔ)句結(jié)尾 我們來(lái)看一段代碼 //合法的代碼 var name = Dreams; function sayName(...

    546669204 評(píng)論0 收藏0
  • JS語(yǔ)句后加不加分號(hào)

    摘要:?jiǎn)栴}前一陣子猛然想到一個(gè)問(wèn)題有分號(hào)自動(dòng)補(bǔ)全機(jī)制在寫時(shí)我是習(xí)慣性在語(yǔ)句后面加上分號(hào)在塊語(yǔ)句后面不加分號(hào)。關(guān)于加不加分號(hào)的問(wèn)題知乎上一些回答這個(gè)問(wèn)題的大佬普遍意見是喜歡就好。 問(wèn)題 前一陣子猛然想到一個(gè)問(wèn)題,JS有分號(hào)自動(dòng)補(bǔ)全(ASI)機(jī)制,在寫JS時(shí)我是習(xí)慣性在語(yǔ)句后面加上分號(hào),在塊語(yǔ)句后面不加分號(hào)。那么如果沒有加分號(hào)的話,在什么情況下會(huì)出現(xiàn)問(wèn)題?在JS語(yǔ)句后到底是應(yīng)該加分號(hào)還是不加分號(hào)...

    OnlyLing 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<