成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript中分號(hào)自動(dòng)插入

dadong / 2731人閱讀

摘要:中分號(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)成一直書(shū)寫(xiě)分號(hào)的習(xí)慣,與此同時(shí)掌握J(rèn)avaScript分號(hào)省略處理機(jī)制是十分重要的。因?yàn)檫@不僅有助于你去理解省略分號(hào)的代碼,而且對(duì)于那些沒(méi)有省略分號(hào)的代碼也能有更深層次的理解。

背景:JavaScript語(yǔ)法

首先,我要介紹一些和本文剩余部分相關(guān)的語(yǔ)法現(xiàn)象,方便大家理解。

表達(dá)式VS語(yǔ)句

表達(dá)式:經(jīng)計(jì)算后會(huì)有一個(gè)值。

 3 * Math.sqrt(x)
    i++
    obj.prop
    [ "a", "b", "c" ]
    { first: "Jane", last: "Doe" }
    function() {} // function expression

語(yǔ)句:程序是由一系列語(yǔ)句組成。

for(var i=0; i<3; i++) {
        console.log(i);
    }
    function twice(x) { // function declaration
        return 2 * x;
    }
    var foo = twice(21); // assignment

注意,賦值語(yǔ)句右邊是一個(gè)表達(dá)式。
語(yǔ)句應(yīng)該以分號(hào)結(jié)尾:在JavaScript中,任何語(yǔ)句都應(yīng)該以分號(hào)結(jié)尾,但下面這些例外。、

循環(huán)語(yǔ)句:for,while(不是do while)

分支語(yǔ)句:if,switch,try

函數(shù)聲明(不是函數(shù)表達(dá)式)
示例1:while VS do while

while(a > 0) {
        a--;
    } // no semicolon
    
    do {
        a--;
    } while(a > 0);

示例2:函數(shù)聲明 VS 函數(shù)表達(dá)式

 function foo() {
    } // no semicolon
    
    var foo = function() {
    };

注意,當(dāng)你在上述提及到的語(yǔ)句后面加了分號(hào),瀏覽器不會(huì)提示你有語(yǔ)法錯(cuò)誤,因?yàn)樗灰曌鳛橐粋€(gè)空語(yǔ)句。

空語(yǔ)句。當(dāng)一個(gè)分號(hào)多帶帶出現(xiàn)的時(shí)候,它代表一個(gè)空語(yǔ)句,什么也不會(huì)做。空語(yǔ)句可以出現(xiàn)在任何語(yǔ)句可以出現(xiàn)的地方。當(dāng)一個(gè)語(yǔ)句是被需要的,但是又不需要這個(gè)語(yǔ)句完成什么功能的時(shí)候,空語(yǔ)句是非常有用的。在這種情況下,塊代碼也是允許的,不過(guò)一個(gè)空語(yǔ)句塊要比一個(gè)分號(hào)要長(zhǎng)。舉個(gè)例子,西面兩個(gè)語(yǔ)句是等價(jià)的:

 while(processNextItem() > 0);
 while(processNextItem() > 0) {}

下面的程序在語(yǔ)法上也是正確的:三個(gè)空語(yǔ)句。

;;;

表達(dá)式作為語(yǔ)句任何表達(dá)式都可以轉(zhuǎn)換為語(yǔ)句,只需在表達(dá)式結(jié)尾加一個(gè)分號(hào)就可以了。比如:

 "hello world";
    a + b;
    sum(5, 3);
    a++;
分號(hào)自動(dòng)插入規(guī)則(ASI)

分號(hào)插入只是一個(gè)術(shù)語(yǔ)。它并不意味著代碼在解析的時(shí)候就真的被插入了分號(hào)。
相反,它只是一個(gè)很好的 用來(lái)解釋當(dāng)分號(hào)可有可無(wú)的情況下的 比喻說(shuō)法。
規(guī)范:解析器把每一個(gè)新的記號(hào)當(dāng)做當(dāng)前語(yǔ)句的一部分,除非有一個(gè)分號(hào)來(lái)結(jié)束它。下面給出的示例代碼,你也許會(huì)以為一個(gè)分號(hào)應(yīng)該被插入,但實(shí)際上沒(méi)有。下面例子闡明了忽略分號(hào)的危險(xiǎn)。

NO ASI:

     a = b + c
    (d + e).print()

上述代碼不會(huì)觸發(fā)ASI,因?yàn)樽罄ㄌ?hào)可以跟在C后面作為函數(shù)調(diào)用。因此,上述代碼被解釋為:

a = b + c(d + e).print();

NO ASI:

 a = b
    /hi/g.exec(c).map(d);

沒(méi)有分號(hào)插入,第二條語(yǔ)句不會(huì)被解釋為正則表達(dá)式。上述代碼等價(jià)于:

a = b / hi / g.exec(c).map(d);   

NO ASI:

 var foo = "bar"
    [ "red", "green" ].foreach(function(c) { console.log(c) })

沒(méi)有分號(hào)被插入。相反,第二行代碼開(kāi)頭被解釋為字符串“bar”的下標(biāo)索引。由于逗號(hào)運(yùn)算符的存在,方括號(hào)的逗號(hào)能夠被解釋器解釋。
NO ASI:
在很多瀏覽器中,下面的代碼中的func被賦值為0,因?yàn)閍++被解釋為上一行的函數(shù)表達(dá)式的參數(shù)。

 var a = 0;
    var func = function(x) { return x }
    (a++)

規(guī)范的例外:在下面的例子中ASI機(jī)制被應(yīng)用。
換行加上非法的記號(hào)符:如果遇到了換行,并且接下來(lái)一行的代碼被添加在上面代碼中不能組成合法的語(yǔ)句,此時(shí)分號(hào)會(huì)被插入。
舉個(gè)例子:

    if (a < 0) a = 0
    console.log(a)

上述代碼會(huì)觸發(fā)ASI機(jī)制,被解釋為下面的語(yǔ)句:

if (a < 0) a = 0;
console.log(a);

禁止的行結(jié)束符:下面的句法結(jié)構(gòu)中在特定位置禁止換行。如果在這些位置遇到換行了,分號(hào)將被插入。在ECMAScript標(biāo)準(zhǔn)中稱下述語(yǔ)法規(guī)則為限制生產(chǎn)( 英文為restricted productions,暫且直譯)。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/83097.html

相關(guān)文章

  • 【知識(shí)點(diǎn)】Javascript分號(hào)規(guī)則

    摘要:花點(diǎn)時(shí)間搞清楚中的分號(hào)規(guī)則吧不管你喜歡結(jié)尾帶分號(hào)或省略分號(hào)的模式分號(hào)允許的場(chǎng)景分號(hào)一般允許出現(xiàn)在大部分語(yǔ)句的末尾,比如等栗子僅有一個(gè)分號(hào)可以表示空語(yǔ)句在中合法,比如可解析為三個(gè)空語(yǔ)句空語(yǔ)句可用于輔助產(chǎn)生語(yǔ)法合法的解析結(jié)果,如如果沒(méi)有末尾的 花點(diǎn)時(shí)間搞清楚JS中的分號(hào)規(guī)則吧~~~不管你喜歡結(jié)尾帶分號(hào)或省略分號(hào)的模式 分號(hào)允許的場(chǎng)景 分號(hào)一般允許出現(xiàn)在大部分語(yǔ)句(statement)的末尾...

    kun_jian 評(píng)論0 收藏0
  • 細(xì)說(shuō) Javascript 拾遺篇(三) : 自動(dòng)插入分號(hào)

    摘要:此時(shí)會(huì)自動(dòng)插入分號(hào),解析器將再次嘗試。工作原理下面的代碼沒(méi)有分號(hào),因此解析器將會(huì)自己判斷在哪些地方插入分號(hào)。前置小括號(hào)在有前置小括號(hào)的情形時(shí),解析器將不會(huì)自動(dòng)插入分號(hào)。這不僅將保證代碼整體的一致性,也將有效地避免解析器對(duì)代碼行為的錯(cuò)誤改變。 盡管 Javascript 有類似 C 的句法風(fēng)格,但是它并不強(qiáng)制在代碼中使用分號(hào),所以分號(hào)可能被省略。Javascript 并不是一個(gè)缺少分號(hào)的...

    mushang 評(píng)論0 收藏0
  • JavaScript里的語(yǔ)句用分號(hào)結(jié)尾是個(gè)選項(xiàng)嗎

    摘要:在以下的種情況是用回車或換行,是不會(huì)作自動(dòng)插入分號(hào)來(lái)讓語(yǔ)句作結(jié)尾。以下情況必用分號(hào)。但有例外,賦值時(shí)可以加分號(hào)是對(duì)的語(yǔ)法。 起因 這個(gè)文章一開(kāi)始回覆于這篇回答中: javascript初級(jí)問(wèn)題 也有之前的朋友寫(xiě)信來(lái)問(wèn),因?yàn)樵谧x到我個(gè)人寫(xiě)的一本電子書(shū): 從ES6開(kāi)始的JavaScript學(xué)習(xí)生活,繁體,gitbook。我在寫(xiě)作風(fēng)格里有說(shuō)明,這本電子書(shū)中的范例都是使用不用分號(hào)(;)作為代碼...

    stormzhang 評(píng)論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記(二十九)--JavaScript要不要加分號(hào)?

    摘要:一自動(dòng)插入分號(hào)規(guī)則三條規(guī)則要有換行符,且下一個(gè)符號(hào)是不符合語(yǔ)法的,那么就嘗試插入分號(hào)。有換行符,且語(yǔ)法中規(guī)定此處不能有換行符,那么就自動(dòng)插入分號(hào)。源代碼結(jié)束處,不能形成完整的腳本或者模塊結(jié)構(gòu),那么就自動(dòng)插入分號(hào)。 筆記說(shuō)明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開(kāi)的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過(guò)程的一些要點(diǎn)筆記以及感悟,完整...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<