亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JavaScript中分號自動插入

dadong / 2761人閱讀

摘要:中分號自動插入轉(zhuǎn)譯自鏈接描述在中,分號自動插入機(jī)制允許在一行代碼結(jié)尾省略分號。比如分號自動插入規(guī)則分號插入只是一個術(shù)語。如果在這些位置遇到換行了,分號將被插入。

JavaScript中分號自動插入

轉(zhuǎn)譯自:鏈接描述
在JavaScript中,分號自動插入機(jī)制允許在一行代碼結(jié)尾省略分號。你應(yīng)該養(yǎng)成一直書寫分號的習(xí)慣,與此同時掌握J(rèn)avaScript分號省略處理機(jī)制是十分重要的。因?yàn)檫@不僅有助于你去理解省略分號的代碼,而且對于那些沒有省略分號的代碼也能有更深層次的理解。

背景:JavaScript語法

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

表達(dá)式VS語句

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

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

語句:程序是由一系列語句組成。

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

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

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

分支語句: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àn)樗灰曌鳛橐粋€空語句。

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

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

下面的程序在語法上也是正確的:三個空語句。

;;;

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

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

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

NO ASI:

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

上述代碼不會觸發(fā)ASI,因?yàn)樽罄ㄌ柨梢愿贑后面作為函數(shù)調(diào)用。因此,上述代碼被解釋為:

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

NO ASI:

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

沒有分號插入,第二條語句不會被解釋為正則表達(dá)式。上述代碼等價于:

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

NO ASI:

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

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

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

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

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

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

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

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

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/83097.html

相關(guān)文章

  • 【知識點(diǎn)】Javascript分號規(guī)則

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

    kun_jian 評論0 收藏0
  • 細(xì)說 Javascript 拾遺篇(三) : 自動插入分號

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

    mushang 評論0 收藏0
  • JavaScript里的語句用分號結(jié)尾是個選項(xiàng)嗎

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

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

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

    Sourcelink 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<