国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript中分號自動插入

dadong / 2710人閱讀

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

JavaScript中分號自動插入

轉譯自:鏈接描述
在JavaScript中,分號自動插入機制允許在一行代碼結尾省略分號。你應該養成一直書寫分號的習慣,與此同時掌握JavaScript分號省略處理機制是十分重要的。因為這不僅有助于你去理解省略分號的代碼,而且對于那些沒有省略分號的代碼也能有更深層次的理解。

背景:JavaScript語法

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

表達式VS語句

表達式:經計算后會有一個值。

 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

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

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

分支語句:if,switch,try

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

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

示例2:函數聲明 VS 函數表達式

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

注意,當你在上述提及到的語句后面加了分號,瀏覽器不會提示你有語法錯誤,因為它被視作為一個空語句。

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

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

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

;;;

表達式作為語句任何表達式都可以轉換為語句,只需在表達式結尾加一個分號就可以了。比如:

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

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

NO ASI:

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

上述代碼不會觸發ASI,因為左括號可以跟在C后面作為函數調用。因此,上述代碼被解釋為:

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

NO ASI:

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

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

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

NO ASI:

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

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

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

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

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

上述代碼會觸發ASI機制,被解釋為下面的語句:

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

禁止的行結束符:下面的句法結構中在特定位置禁止換行。如果在這些位置遇到換行了,分號將被插入。在ECMAScript標準中稱下述語法規則為限制生產( 英文為restricted productions,暫且直譯)。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83097.html

相關文章

  • 【知識點】Javascript分號規則

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

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

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

    mushang 評論0 收藏0
  • JavaScript里的語句用分號結尾是個選項嗎

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

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

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

    Sourcelink 評論0 收藏0

發表評論

0條評論

dadong

|高級講師

TA的文章

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