整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JavaScript事件循環:同步任務和異步任務

          avaScript 是一門單線程執行的編程語言。也就是說,同一時間只能做一件事情。如果前一個任務非常耗時,則后續的任務就不得不一直等待,從而導致程序假死的問題。

          所以為了防止某個耗時任務導致程序假死的問題,JavaScript 把待執行的任務分為了兩類:

          1. 同步任務(synchronous)

          又叫做非耗時任務,指的是在主線程上排隊執行的那些任務,只有前一個任務執行完畢,才能執行后一個任務。

          2. 異步任務(asynchronous)

          又叫做耗時任務,異步任務由JavaScript 委托給宿主環境進行執行,當異步任務執行完成后,會通知JavaScript 主線程執行異步任務的回調函數。

          同步任務和異步任務的執行過程:

          ①同步任務由JavaScript 主線程次序執行。

          ②異步任務委托給宿主環境執行。

          ③已完成的異步任務對應的回調函數,會被加入到任務隊列中等待執行。

          ④JavaScript 主線程的執行棧被清空后,會讀取任務隊列中的回調函數,次序執行。

          ⑤JavaScript 主線程不斷重復上面的第4 步。

          JavaScript 主線程從“任務隊列”中讀取異步任務的回調函數,放到執行棧中依次執行。這個過程是循環不斷的,所以整個的這種運行機制又稱為EventLoop(事件循環)

          import thenFs from ' then-fs '
          
          
          console 
          log('A')
          thenFs. readFile(' ./files/1.txt', 'utf8' ). then(dataStr => {
          
          
          console.log('B')
           })
          setTimeout(( ) => {
          console. log('C' )
          },0)
          console.log( 'D')

          正確的輸出結果:ADCB。

          其中:

          A 和D 屬于同步任務。會根據代碼的先后順序依次被執行。

          C 和B 屬于異步任務。它們的回調函數會被加入到任務隊列中,等待主線程空閑時再執行。

          循環可以將代碼塊執行指定的次數。

          JavaScript 循環

          如果您希望一遍又一遍地運行相同的代碼,并且每次的值都不同,那么使用循環是很方便的。

          我們可以這樣輸出數組的值:

          一般寫法:

          document.write(cars[0] + "<br>");

          document.write(cars[1] + "<br>");

          document.write(cars[2] + "<br>");

          document.write(cars[3] + "<br>");

          document.write(cars[4] + "<br>");

          document.write(cars[5] + "<br>");

          使用for循環

          for (var i=0;i<cars.length;i++)

          {

          document.write(cars[i] + "<br>");

          }

          不同類型的循環

          JavaScript 支持不同類型的循環:

          • for - 循環代碼塊一定的次數

          • for/in - 循環遍歷對象的屬性

          • while - 當指定的條件為 true 時循環指定的代碼塊

          • do/while - 同樣當指定的條件為 true 時循環指定的代碼塊

          For 循環

          for 循環是您在希望創建循環時常會用到的工具。

          下面是 for 循環的語法:

          for (語句 1; 語句 2; 語句 3)

          {

          被執行的代碼塊

          }

          語句 1 (代碼塊)開始前執行 starts.

          語句 2 定義運行循環(代碼塊)的條件

          語句 3 在循環(代碼塊)已被執行之后執行

          實例

          for (var i=0; i<5; i++)

          {

          x=x + "該數字為 " + i + "<br>";

          }

          從上面的例子中,您可以看到:

          Statement 1 在循環開始之前設置變量 (var i=0)。

          Statement 2 定義循環運行的條件(i 必須小于 5)。

          Statement 3 在每次代碼塊已被執行后增加一個值 (i++)。

          語句 1

          通常我們會使用語句 1 初始化循環中所用的變量 (var i=0)。

          語句 1 是可選的,也就是說不使用語句 1 也可以。

          您可以在語句 1 中初始化任意(或者多個)值:

          實例:

          for (var i=0,len=cars.length; i<len; i++)

          {

          document.write(cars[i] + "<br>");

          }

          同時您還可以省略語句 1(比如在循環開始前已經設置了值時):

          實例:

          var i=2,len=cars.length;

          for (; i<len; i++)

          {

          document.write(cars[i] + "<br>");

          }

          語句 2

          通常語句 2 用于評估初始變量的條件。

          語句 2 同樣是可選的。

          如果語句 2 返回 true,則循環再次開始,如果返回 false,則循環將結束。

          如果您省略了語句 2,那么必須在循環內提供 break。否則循環就無法停下來。這樣有可能令瀏覽器崩潰。請在本教程稍后的章節閱讀有關 break 的內容。

          語句 3

          通常語句 3 會增加初始變量的值。

          語句 3 也是可選的。

          語句 3 有多種用法。增量可以是負數 (i--),或者更大 (i=i+15)。

          語句 3 也可以省略(比如當循環內部有相應的代碼時):

          實例:

          var i=0,len=cars.length;

          for (; i<len; )

          {

          document.write(cars[i] + "<br>");

          i++;

          }

          for/In 循環

          JavaScript for/in 語句循環遍歷對象的屬性:

          實例

          var person={fname:"John",lname:"Doe",age:25};

          for (x in person)

          {

          txt=txt + person[x];

          }

          您將在有關 JavaScript 對象的章節學到更多有關 for / in 循環的知識。

          While 循環

          我們將在下一章為您講解 while 循環和 do/while 循環。

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!

          文來源:微信公眾號:Node地下鐵 作者: 冰森

          出處:https://mp.weixin.qq.com/s/OudqDff3QvmBqIiD74LrTw


          主站蜘蛛池模板: 午夜一区二区在线观看| 国产福利一区二区在线视频 | 国产成人精品一区二三区| 国产一区二区三区影院| 国产吧一区在线视频| 日韩欧美一区二区三区免费观看| 无码视频一区二区三区| 国产精品一区二区电影| 国模少妇一区二区三区| 69久久精品无码一区二区| 精品一区二区高清在线观看| 国产麻豆精品一区二区三区v视界| 国产日韩一区二区三区在线播放| 国产在线一区视频| 亚欧成人中文字幕一区| 相泽南亚洲一区二区在线播放 | 国产精品美女一区二区视频| 无码国产精品一区二区免费式影视| 日韩高清一区二区三区不卡| 国产精品无圣光一区二区| 亚洲av乱码中文一区二区三区| 国产精品乱码一区二区三区| 中文字幕AV无码一区二区三区| 美女视频免费看一区二区| 久久久国产精品亚洲一区| 视频一区二区在线播放| 亚洲日本久久一区二区va| 国产激情一区二区三区 | 亚州AV综合色区无码一区| 国产综合无码一区二区三区| 无码av中文一区二区三区桃花岛| 在线观看国产一区| 国产精品亚洲一区二区三区在线观看 | 中文字幕一区一区三区| 成人午夜视频精品一区| 国产一区二区三区日韩精品| 亚洲一区精品视频在线| 波多野结衣的AV一区二区三区| 国产视频一区二区| 一本一道波多野结衣一区| 久久一区二区三区精品|