<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Web前端入門第 63 問:JavaScript 圖解 for 循環執行順序

      神奇的 for 循環代碼執行順序并不是按照代碼書寫順序執行,這就導致在看很多程序算法的時候,會有那么一點打腦殼。

      for 語法

      for 循環的語法很簡單,重點是小括號里面的三個部分,這三部分的執行順序對于不太懂程序的兄弟來說,可以把人晃暈~

      for (初始化; 條件; 增量) {
        // 循環體
      }
      

      初始化 部分僅在進入循環時候執行,條件 部分會在每次循環開始時執行,增量 部分在每次循環最后執行。

      語言乏力,下面看圖解。

      圖解

      先看這么一段代碼:

      console.log('start')
      for (
        let i = 0;
        i < 3;
        i++
      ) {
        console.log(i);
      }
      console.log('end')
      

      對于代碼輸出,一口都可以說出來:

      start
      0
      1
      2
      end
      

      但對于代碼的執行順序,就不太好說了~~

      先加一個 debugger 讓代碼斷點,利用斷點來看執行順序。

      如下圖:

      逐步解析

      1、程序進入斷點。
      2、執行了 console.log('start'),輸出打印 start。

      【3、4、5、6】第一次循環
      3、執行初始化語句 let i = 0,變量 i 賦值 0 作為初始條件。
      4、執行條件判斷 i < 3,i=0 小于 3,進入循環體。
      5、執行循環體 console.log(i),輸出打印 0。
      6、執行增量語句 i++,i 變為 1。

      【7、8、9】第二次循環
      7、執行條件判斷 i < 3,i=1 小于 3,再次進入循環體。
      8、執行循環體 console.log(i),輸出打印 1。
      9、執行增量語句 i++,i 變為 2。

      【10、11、12】第三次循環
      10、執行條件判斷 i < 3,i=2 小于 3,繼續進入循環體。
      11、執行循環體 console.log(i),輸出打印 2。
      12、執行增量語句 i++,i 變為 3。

      13、開始第四次循環判斷 i < 3,由于 i=3 已經不小于 3,所以循環終止。
      14、執行 console.log('end') ,輸出打印 end,整個代碼段結束。

      可以看到,增量語句是在每次循環體執行完之后再執行的,其執行順序與書寫順序是不相關的!

      for 變體

      根據上面的執行順序,可以推斷 for 循環其實是可以改變寫法的,小括號中的三部分都可以省略。

      1、省略初始化語句

      let i = 0;
      for (; i < 3; i++) {
        console.log(i);
      }
      console.log('end')
      

      2、省略條件判斷語句

      for (let i = 0; ; i++) {
        if (i >= 3) {
          break;
        }
        console.log(i);
      }
      console.log('end')
      

      3、省略增量語句

      for (let i = 0; i < 3; ) {
        console.log(i);
        i++;
      }
      console.log('end')
      

      4、省略所有語句

      let i = 0;
      for (;;) {
        if (i >= 3) {
          break;
        }
        console.log(i);
        i++;
      }
      console.log('end')
      

      雖然省略這些條件的代碼有些奇葩,但語法規則又允許這么寫,那么就有必要了解下這些變體寫法,以防拿到這樣的代碼之后就懵了~~

      寫在最后

      單個 for 循環很簡單,但算法中的循環可不止一個,層層嵌套下來之后,再疊加上遞歸 Buff,那代碼看起來就打腦殼了,所以搞算法的大佬們都值得膜拜~~

      分享一個數組快速排序的代碼,驗證下代碼閱讀能力:

      function quickSort(arr) {
          // 數組小于 1 不用排序,直接返回即可
          if(arr.length <= 1) {
            return arr;
          }
           
          const p = arr[Math.floor(arr.length / 2)]; // 使用中間元素作為比較的基準值
          const left = []; // 左分區
          const right = []; // 右分區
          const equal = []; // 等于基準點的元素
           
          // 遍歷給左右分區
          for(let i = 0; i < arr.length; i++) {
            const item = arr[i];
            if(item < p) {
              // 小于基準點放在左邊
              left.push(item)
            }else if (item > p) {
              // 大于基準點方在右邊
              right.push(item)
            } else {
              equal.push(item)
            }
          }
          // 合一并且對左右分區,遞歸處理
          return quickSort(left).concat(equal, quickSort(right))
      }
       
      // 使用
      const tempArr = [3, 6, 8, 10, 1, 2, 1];
      console.log(quickSort(tempArr)); // [1, 1, 2, 3, 6, 8, 10]
      
      posted @ 2025-06-04 10:29  前端路引  閱讀(899)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产乱码日韩精品一区二区| 国精偷拍一区二区三区| 久久精品国产亚洲AV成人毛片| 午夜成人鲁丝片午夜精品| 综合久青草视频在线观看| 国产精品小仙女自拍视频| 欧美gv在线| 无码人妻精品一区二区三区免费 | 国产欧美精品一区二区三区| 久久精品久久黄色片看看| 在线a亚洲老鸭窝天堂| 伊人久久大香线蕉av一区二区 | 精品一区二区三区不卡| 久久国产成人高清精品亚洲| 亚洲欧美自偷自拍视频图片| 97久久超碰国产精品2021| 赤水市| 大又大又粗又硬又爽少妇毛片| 好吊视频专区一区二区三区| 荡乳尤物h| 亚洲精品日韩中文字幕| 国产成人精品午夜二三区| 精品无人区卡一卡二卡三乱码| 无码国产精品成人| 国产精品久久无中文字幕| 亚洲国产精品综合久久2007| 成年女人永久免费观看视频| 人妻精品久久无码专区涩涩| 亚洲国产av一区二区| 全免费A级毛片免费看无码| brazzers欧美巨大| 亚洲天堂男人天堂女人天堂| 三上悠亚精品一区二区久久| 日韩少妇人妻vs中文字幕| 国产精品女生自拍第一区| 日韩欧美不卡一卡二卡3卡四卡2021免费 | 亚洲一二三区精品美妇| 精品国产一区二区色老头| 国产精品天干天干综合网| 东方av四虎在线观看| 国产无遮挡真人免费视频|