激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

淺談JavaScript的執行順序

時(shí)間:2024-08-16 09:47:02 JavaScript 我要投稿
  • 相關(guān)推薦

淺談JavaScript的執行順序

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

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

  在 html 文檔中的執行順序

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

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

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

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

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

  還有對于通過(guò)腳本標簽

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

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

  console.log(1);

  預編譯

  當js引擎解析的時(shí)候,它會(huì )在預編譯對所有聲明的變量和函數進(jìn)行處理。

  變量提升

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

  預解析函數

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

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

  分塊執行代碼

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

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

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

  因為js是按代碼塊來(lái)執行的。瀏覽器在解析html文檔流的時(shí)候,如果遇到一個(gè)

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

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

  由于js是按塊處理代碼,同時(shí)又遵循h(huán)tml文檔流的解析順序,因此在上面的栗子中會(huì )看到語(yǔ)法錯誤。但是,在文檔流加載完畢后再次訪(fǎng)問(wèn)就不會(huì )出現這種錯誤了。(下面一個(gè)栗子)

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

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

  還有為了安全起見(jiàn),一般在頁(yè)面初始化完畢之后才允許js代碼執行,這樣就可以避免一些網(wǎng)速對js執行的影響。同時(shí),也避開(kāi)了html文檔流對js執行的限制。

  綜上所述,javascript在執行時(shí)的步驟是:

  1、先讀入第一段代碼塊

  2、對代碼塊進(jìn)行語(yǔ)法分析,如果出現語(yǔ)法錯誤,直接執行第5步驟

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

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

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

  6、結束

【淺談JavaScript的執行順序】相關(guān)文章:

JavaScript函數的執行過(guò)程09-20

在Java中執行JavaScript代碼07-14

探尋Javascript執行效率問(wèn)題07-24

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

淺談javascript中的單線(xiàn)程理解08-16

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

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

淺談如何深入學(xué)習Javascript中的this關(guān)鍵字08-19

javascript的方法08-09

Javascript模板07-29

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频