1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        es6解構(gòu)賦值 [a,b] = [b,a]的幾個(gè)問題

        共 1998字,需瀏覽 4分鐘

         ·

        2021-08-18 06:53

        相比于傳統(tǒng)方法需要一個(gè)額外變量來進(jìn)行值交換,使用解構(gòu)進(jìn)行值交換十分方便。但是我想到幾個(gè)問題:

        1、解構(gòu)賦值有沒有節(jié)省空間呢?

        // 傳統(tǒng)

        let c = b;

        b = a;

        a = c;

        // 解構(gòu)

        [a, b] = [b, a];

        首先思考如下操作:

        let a = 1, b = 2;

        [a, b] = [b=a, a=3];//1 3

        可以分析出解構(gòu)賦值的過程應(yīng)當(dāng)為

        1. 以從左到右的順序計(jì)算右側(cè)數(shù)組的值,得到數(shù)組
        2. 以從左到右的順序,將右側(cè)數(shù)組的值賦給左側(cè)

        可以看到解構(gòu)復(fù)制的過程中會有一個(gè)包含兩個(gè)元素的臨時(shí)數(shù)組,并沒有比傳統(tǒng)方法節(jié)省空間,甚至空間會比傳統(tǒng)方法更多一個(gè) int 值大小的空間。

        2、解構(gòu)賦值有沒有更快呢?

        話不多講,直接上代碼:

        const times = 3000000000;

        let a = 1, b = 2;

        let time1 = new Date().getTime();

        while (i++ < times) {

          [a, b] = [b, a];

          let c = b;

          b = a;

          a = c;

          let d = b;

          b = a;

          a = d;

        }

        console.log(new Date().getTime() - time1); // 4300左右

        time1 = new Date().getTime();

        while (i-- >= 0) {

          [a, b] = [b, a];

          [a, b] = [b, a];

          let c = b;

          b = a;

          a = c;

        }

        console.log(new Date().getTime() - time1); // 6400左右

        可以看到,解構(gòu)交換值的速度更慢。按照常理猜測一下,可能是解構(gòu)賦值需要申請臨時(shí)數(shù)組,然后遍歷數(shù)組對等號左側(cè)的變量進(jìn)行賦值,在此期間還需要檢測數(shù)組元素是否為 undefined,這一過程較為費(fèi)時(shí)。

        3、一個(gè)有趣(撓頭)的發(fā)現(xiàn)

        while (i++ < times) {

          [a, b] = [b, a];

          [a, b] = [b, a];

          let c = b;

          b = a;

          a = c;

        }

        while (i++ < times) {

          [a, b] = [b, a];

          [a, b] = [b, a];

        }

        肉眼觀察,上面的循環(huán)內(nèi)操作更多,應(yīng)當(dāng)耗時(shí)更多,結(jié)果卻是在公司 mbp 上運(yùn)行,前者耗時(shí)顯著更少,在個(gè)人 windows 電腦上運(yùn)行,二者耗時(shí)幾乎一致。經(jīng)過分析只知道可能與 JIT 有關(guān),卻不知道具體原因。希望有大佬可以為萌新解惑呀~



        瀏覽 23
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            在线无码一区二区 | 国产手机在线观看 | 毛片内射 | 午夜影院一级 | 亚洲无码高清视频在线观看 | 国产精品永久免费观看 | 99热在线精品播放 | 高潮喷水在线 | 国产日韩欧美一区二区宅男 | 欧美一级黄视频 |