整合營銷服務商

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

          免費咨詢熱線:

          JavaScript里的循環方法

          JavaScript里的循環方法

          我們開始使用內置的forEach方法

          myArray.forEach(function (value) {

          寫法簡單了許多,但也有短處:你不能中斷循環(使用break語句或使用return語句。)

          還有一種for-of循環

          它的for-of的語法:

          for-of循環使用例子:

          循環一個字符串:

          循環一個Map:

          循環一個數組(Array);

          我們可以使用const來替代let,這樣它就變成了在循環里的不可修改的靜態變量。

          循環一個擁有enumerable屬性的對象:

          for–of循環并不能直接使用在普通的對象上,但如果我們按對象所擁有的屬性進行循環,可使用內置的Object.keys()方法:

          切版 qieban(.cn)

          編寫程序時,我們經常需要重復執行某些操作,這時候循環結構就顯得非常有用。JavaScript 提供了多種循環結構,以適應不同的編程場景。以下是 JavaScript 中常見的循環結構:

          for 循環

          for 循環是最常見的循環結構之一,它允許我們指定循環開始前的初始化代碼、循環繼續的條件以及每次循環結束時要執行的代碼。

          基本語法

          for (初始化表達式; 循環條件; 循環后的操作表達式) {
              // 循環體代碼
          }
          

          示例:輸出 1 到 10 的數字

          for (var i=1; i <=10; i++) {
              console.log(i);
          }
          

          while 循環

          while 循環在給定條件為真時將不斷循環執行代碼塊。與 for 循環不同,while 循環只有循環條件,沒有初始化和迭代表達式。

          基本語法

          while (條件) {
              // 循環體代碼
          }
          

          示例:使用 while 循環輸出 1 到 10 的數字

          var i=1;
          while (i <=10) {
              console.log(i);
              i++;
          }
          

          do...while 循環

          do...while 循環和 while 循環類似,但它至少會執行一次循環體,無論條件是否為真。

          基本語法

          do {
              // 循環體代碼
          } while (條件);
          

          示例:使用 do...while 循環輸出 1 到 10 的數字

          var i=1;
          do {
              console.log(i);
              i++;
          } while (i <=10);
          

          for...in 循環

          for...in 循環用于遍歷對象的屬性。

          基本語法

          for (var key in 對象) {
              // 使用 key 訪問對象屬性
          }
          

          示例:遍歷對象的屬性

          var person={
              name: "張三",
              age: 30,
              job: "軟件工程師"
          };
          
          for (var key in person) {
              console.log(key + ": " + person[key]);
          }
          

          for...of 循環

          for...of 循環用于遍歷可迭代對象(如數組、字符串等)的元素。

          基本語法

          for (var item of 可迭代對象) {
              // 使用 item 訪問元素
          }
          

          示例:遍歷數組的元素

          var fruits=["蘋果", "香蕉", "橘子"];
          for (var fruit of fruits) {
              console.log(fruit);
          }
          

          總結

          JavaScript 的循環結構為我們提供了強大的工具來處理重復任務。for 循環適合于當我們知道循環次數時使用;while 和 do...while 循環適合于循環次數未知,但是循環條件明確的情況;for...in 和 for...of 循環則讓對象和數組的遍歷變得更加簡潔。掌握這些循環結構有助于我們編寫更加高效和可讀性更強的代碼。

          s是單線程的語言,單線程是指所有的程序路徑按照一定的順序執行,只有前面的程序執行了,后面的程序才會執行。

          也就是說在同一時間,js只能做一件事情,為了協調瀏覽器產生的各種事件、網絡處理、前端渲染等行為,js的事件循環機制,即EventLoop應運而生。

          JavaScript是單線程的原因

          js的設計初衷是作為瀏覽器的腳本語言,瀏覽器中涉及到與用戶互動、頻繁操作DOM等動作,如果js設計為多線程,會有很復雜的線程同步問題,即使同步問題被解決,也會降低瀏覽器的響應效率,得不償失,因此,JavaScript被設計為單線程保證瀏覽器動作的一致性。

          事件循環(EventLoop)

          JavaScript既然被設計為單線程,是如何做到異步的呢?這時就用到了JavaScript的事件循環機制。

          如下圖所示為JavaScript事件循環的原理圖。

          如圖所示,事件循環是主線程循環讀取任務隊列中的任務,直到所有的任務都被執行。在事件循環中,JavaScript用到了棧、堆以及隊列等數據結構。

          棧中存放的是執行上下文,有函數被調用時,就會創建上下文存放在執行棧中。

          堆中表示一個非結構化的內存區域,用來存放對象。隊列是指任務隊列,用于存放異步任務。

          js引擎遇到一個異步事件之后不會一直等待事件的返回結果,而是將事件掛起,繼續執行執行棧中的其他任務。

          當異步事件返回結果時,js將異步事件callback函數放入隊列中,被放入隊列中的異步事件不會立即回調,等到當前執行棧中的任務都執行完成,處于閑置狀態的主線程按照隊列順序將處于首位事件的callback函數放入執行棧中,執行該函數的同步代碼,如果遇到了異步事件,同樣也會將其回調函數放入事件隊列中......

          如此反復,就形成了一個無限循環,這也是被稱為“事件循環(EventLoop)”的原因。

          宏任務(Micro task)和微任務(Macro task)

          js事件循環的基本原理已經描述清楚,但是異步任務之間也有所不同。

          上面講到,js在執行異步任務時,回調函數會被放在js的任務隊列中,實際上,回調函數的類別不同,執行的優先級也不同。

          不同的優先級被分為兩類,一類是宏任務(Micro task),一類是微任務(Macro task)。

          回調函數是微任務時,會被放在微任務隊列,回調函數是宏任務時,會被放在宏任務隊列。微任務的優先級高于宏任務,當主線程的任務執行完成時,會首先去執行微任務隊列中首位的回調函數,當微任務隊列中為空時,才回去執行宏任務隊列中的回調函數。

          常見的微任務有:promise,常見的宏任務有setInterval等。

          因此,事件循環的執行流程圖如下所示:

          最后:

          1)關注+私信回復:“測試”,可以免費領取一份10G軟件測試工程師面試寶典文檔資料。以及相對應的視頻學習教程免費分享!,其中包括了有基礎知識、Linux必備、Mysql數據庫、抓包工具、接口測試工具、測試進階-Python編程、Web自動化測試、APP自動化測試、接口自動化測試、測試高級持續集成、測試架構開發測試框架、性能測試等。

          2)關注+私信回復:"入群" 就可以邀請你進入軟件測試群學習交流~~


          主站蜘蛛池模板: 色久综合网精品一区二区| 久久精品无码一区二区无码| 日韩精品视频一区二区三区| 国产高清一区二区三区四区| 日本一区二区三区不卡视频| 无码av免费一区二区三区试看| 亚洲视频在线一区二区| 久久精品无码一区二区三区免费 | 国产伦精品一区二区三区| 亚洲高清一区二区三区电影 | 无码精品人妻一区二区三区漫画 | 国产乱码一区二区三区四| AV无码精品一区二区三区| 日本免费电影一区| 亚洲一区二区三区偷拍女厕 | 国产乱码伦精品一区二区三区麻豆| 日本一区二区三区在线视频观看免费| 久久亚洲中文字幕精品一区四 | 国产精品合集一区二区三区| 国产伦精品一区二区三区无广告| 国产综合无码一区二区三区| 亚洲日韩AV一区二区三区四区| 一区二区三区免费精品视频| 亚洲AV无码一区二区乱子伦| 午夜视频在线观看一区二区| 一区二区三区电影网| 国产精品无码AV一区二区三区| 精品国产一区二区三区无码| 国产一区二区三区在线观看影院| 无码精品一区二区三区在线| 欧洲精品码一区二区三区免费看| 人妻AV一区二区三区精品| 日韩一区二区三区在线精品| 色噜噜狠狠一区二区| 国产凹凸在线一区二区| 日韩精品久久一区二区三区| 亚洲一区二区中文| 好爽毛片一区二区三区四| 日韩精品一区二区三区中文版| 无码视频一区二区三区在线观看| 一区二区三区视频观看|