• <sub id="h4knl"><ol id="h4knl"></ol></sub>
    <sup id="h4knl"></sup>
      <sub id="h4knl"></sub>

      <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
      1. <strong id="h4knl"></strong>

      2. 淺談JavaScript的執行順序

        時間:2024-08-16 09:47:02 JavaScript 我要投稿
        • 相關推薦

        淺談JavaScript的執行順序

          雖然現代瀏覽器可以并行的下載JavaScript(部分瀏覽器),但考慮到JavaScript的依賴關系,他們的執行依然是按照引入順序進行的。

          本文章記錄本人在學習 JavaScript 中看書理解到的一些東西,加深記憶和并且整理記錄下來,方便之后的復習。

          在 html 文檔中的執行順序

          js代碼執行順序比較的形象,用戶可以直觀的感受這種執行順序。但是,js代碼的執行順序是比較復雜的。有時候我們會把js代碼寫在html里面,而html文檔在瀏覽器中解析的過程是這樣:瀏覽器按照文檔流從上到下逐步解析頁面結構和信息。js代碼作為嵌入的腳本也算做html文檔的組成部分,因此,js代碼在裝載時的執行順序也是根據腳本標簽

          的出現來順序來決定。(下面一個栗子)  console.log("頂部腳本");

          console.log("頭部腳本");

          console.log("頁面腳本");

          console.log("底部腳本");

          還有對于通過腳本標簽

          的src屬性導入的外部js文件腳本,它也將按照其語句出現的順序來執行,而且執行過程是文檔裝載的一部分,不會因為是外部js文件而延期執行。  // 先加載 b.js 并且執行里面的代碼

          // 然后在按順序執行下面的代碼

          console.log(1);

          預編譯

          當js引擎解析的時候,它會在預編譯對所有聲明的變量和函數進行處理。

          變量提升

          console.log(a); // undefinedvar a = 1;console.log(a); // 1

          預解析函數

          f(); // 1function f() {  console.log(1);};

          詳細:javascript變量聲明提升(hoisting)

          分塊執行代碼

          js是按塊執行代碼的,所謂代碼塊就是使用

          標簽分隔的代碼段。(下面一個栗子)  // 代碼段1  var a = 1;

          // 代碼段2  function f() {    console.log(1);  };

          因為js是按代碼塊來執行的。瀏覽器在解析html文檔流的時候,如果遇到一個

          標簽,則js會等到這個代碼塊都加載完之后再對代碼進行預編譯,然后在執行。執行完畢后,瀏覽器會繼續解析西門的html文檔流,同時js也準備好處理下一個代碼塊。  有個小坑,由于js是按塊執行的,因此在一個js塊中調用后面塊聲明的變量或者函數就會提示語法錯誤。但是不同塊都屬于一個全局作用域,也就是說,塊之間的變量和函數是可以共享的。(下面一個栗子)  // 代碼段1  console.log(a);  f();

          // 代碼段2  var a = 1;  function f() {    console.log(1);  };

          由于js是按塊處理代碼,同時又遵循html文檔流的解析順序,因此在上面的栗子中會看到語法錯誤。但是,在文檔流加載完畢后再次訪問就不會出現這種錯誤了。(下面一個栗子)

          window.onload = function(){ // 頁面初始化事件處理函數    // 代碼段1    console.log(a);    f();  }

          // 代碼段2  var a = 1;  function f() {    console.log(1);  };

          還有為了安全起見,一般在頁面初始化完畢之后才允許js代碼執行,這樣就可以避免一些網速對js執行的影響。同時,也避開了html文檔流對js執行的限制。

          綜上所述,javascript在執行時的步驟是:

          1、先讀入第一段代碼塊

          2、對代碼塊進行語法分析,如果出現語法錯誤,直接執行第5步驟

          3、對var變量和function定義的函數進行“預編譯處理”(賦值式函數是不會進行預編譯處理的)

          4、執行代碼塊,有錯則報錯

          5、如果還有下一段代碼塊,則讀入下一段代碼塊,重復步驟2

          6、結束

        《&.doc》
        将本文的Word文档下载到电脑,方便收藏和打印
        推荐度:
        点击下载文档

        【淺談JavaScript的執行順序】相關文章:

        JavaScript函數的執行過程09-20

        在Java中執行JavaScript代碼07-14

        探尋Javascript執行效率問題07-24

        JavaScript執行效率與性能提升策略11-01

        淺談javascript中的單線程理解08-16

        淺談javascript深入理解js閉包07-01

        深入理解Javascript中自執行匿名函數10-27

        淺談如何深入學習Javascript中的this關鍵字08-19

        javascript的方法08-09

        Javascript模板07-29

        在线咨询
        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码
      3. <sub id="h4knl"><ol id="h4knl"></ol></sub>
        <sup id="h4knl"></sup>
          <sub id="h4knl"></sub>

          <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
          1. <strong id="h4knl"></strong>

          2. 在线不卡日本v一区二区 | 精品乱子伦一区二区三区 | 亚洲国产99热最新在线 | 中文字幕欧美在线 | 亚洲人成网站精品片在线观看 | 在线视频网站色秀视频 |

            淺談JavaScript的執行順序

              雖然現代瀏覽器可以并行的下載JavaScript(部分瀏覽器),但考慮到JavaScript的依賴關系,他們的執行依然是按照引入順序進行的。

              本文章記錄本人在學習 JavaScript 中看書理解到的一些東西,加深記憶和并且整理記錄下來,方便之后的復習。

              在 html 文檔中的執行順序

              js代碼執行順序比較的形象,用戶可以直觀的感受這種執行順序。但是,js代碼的執行順序是比較復雜的。有時候我們會把js代碼寫在html里面,而html文檔在瀏覽器中解析的過程是這樣:瀏覽器按照文檔流從上到下逐步解析頁面結構和信息。js代碼作為嵌入的腳本也算做html文檔的組成部分,因此,js代碼在裝載時的執行順序也是根據腳本標簽

              的出現來順序來決定。(下面一個栗子)  console.log("頂部腳本");

              console.log("頭部腳本");

              console.log("頁面腳本");

              console.log("底部腳本");

              還有對于通過腳本標簽

              的src屬性導入的外部js文件腳本,它也將按照其語句出現的順序來執行,而且執行過程是文檔裝載的一部分,不會因為是外部js文件而延期執行。  // 先加載 b.js 并且執行里面的代碼

              // 然后在按順序執行下面的代碼

              console.log(1);

              預編譯

              當js引擎解析的時候,它會在預編譯對所有聲明的變量和函數進行處理。

              變量提升

              console.log(a); // undefinedvar a = 1;console.log(a); // 1

              預解析函數

              f(); // 1function f() {  console.log(1);};

              詳細:javascript變量聲明提升(hoisting)

              分塊執行代碼

              js是按塊執行代碼的,所謂代碼塊就是使用

              標簽分隔的代碼段。(下面一個栗子)  // 代碼段1  var a = 1;

              // 代碼段2  function f() {    console.log(1);  };

              因為js是按代碼塊來執行的。瀏覽器在解析html文檔流的時候,如果遇到一個

              標簽,則js會等到這個代碼塊都加載完之后再對代碼進行預編譯,然后在執行。執行完畢后,瀏覽器會繼續解析西門的html文檔流,同時js也準備好處理下一個代碼塊。  有個小坑,由于js是按塊執行的,因此在一個js塊中調用后面塊聲明的變量或者函數就會提示語法錯誤。但是不同塊都屬于一個全局作用域,也就是說,塊之間的變量和函數是可以共享的。(下面一個栗子)  // 代碼段1  console.log(a);  f();

              // 代碼段2  var a = 1;  function f() {    console.log(1);  };

              由于js是按塊處理代碼,同時又遵循html文檔流的解析順序,因此在上面的栗子中會看到語法錯誤。但是,在文檔流加載完畢后再次訪問就不會出現這種錯誤了。(下面一個栗子)

              window.onload = function(){ // 頁面初始化事件處理函數    // 代碼段1    console.log(a);    f();  }

              // 代碼段2  var a = 1;  function f() {    console.log(1);  };

              還有為了安全起見,一般在頁面初始化完畢之后才允許js代碼執行,這樣就可以避免一些網速對js執行的影響。同時,也避開了html文檔流對js執行的限制。

              綜上所述,javascript在執行時的步驟是:

              1、先讀入第一段代碼塊

              2、對代碼塊進行語法分析,如果出現語法錯誤,直接執行第5步驟

              3、對var變量和function定義的函數進行“預編譯處理”(賦值式函數是不會進行預編譯處理的)

              4、執行代碼塊,有錯則報錯

              5、如果還有下一段代碼塊,則讀入下一段代碼塊,重復步驟2

              6、結束