国产69囗曝吞精在线视频,肥臀浪妇太爽了快点再快点,亚洲欧洲成人a∨在线观看,狠狠色丁香久久综合 ,国精一二二产品无人区免费应用,亚洲精品久久久久中文字幕,四虎一区二区成人免费影院网址 ,无码三级中文字幕在线观看

      閉包--沒(méi)有那么復(fù)雜!

      2021-4-20    前端達(dá)人

      一弄JS,就總有人在提閉包、閉包的,此前不了解,上網(wǎng)上搜,很多講的也過(guò)于難懂,感覺(jué)沒(méi)有必要那么復(fù)雜,今天就把我對(duì)于閉包的理解總結(jié)一下,力求簡(jiǎn)單、通俗、易懂



      目錄



      1.什么是閉包



      2.閉包有什么用?



      3.閉包帶來(lái)了什么問(wèn)題呢?



      4.總結(jié)



       1.什么是閉包

      通俗的理解就是:子函數(shù)使用著父函數(shù)作用域內(nèi)的變量,導(dǎo)致父函數(shù)作用域內(nèi)的變量無(wú)法回收釋放的這種情況。



      <script>

      function a(){

         let num=0;

         return ()=>{

           console.log(num++);

         }

      };

      let t=a();

      //執(zhí)行三次結(jié)果是多少?

      t();

      t();

      t();

      </script>

       看上面的代碼,分別執(zhí)行三次t(),那么結(jié)果是多少呢?







      結(jié)果是0,1,2,這是怎么回事呢?原因就是閉包導(dǎo)致的。



      我們首先分析:a函數(shù)內(nèi)有一個(gè)num變量和一個(gè)子函數(shù),在子函數(shù)中使用著父函數(shù)a的變量num,使其自加1。隨后將a函數(shù)執(zhí)行后復(fù)制給t,由于子函數(shù)一直在使用num變量(其實(shí)不論子函數(shù)是否使用,父函數(shù)的變量都不會(huì)釋放,隨時(shí)等待子函數(shù)調(diào)用除非子函數(shù)引用被釋放),所以num變量并不會(huì)回收釋放。也就是說(shuō)三次t()改變的num其實(shí)是一個(gè)。這就是閉包的原因,如果沒(méi)有閉包,在子函數(shù)處理完num后,num回收,則應(yīng)該是三個(gè)0。



      2.閉包有什么用?

      從另一個(gè)角度理解,如果一個(gè)函數(shù)沒(méi)有被回收釋放,那么他的父級(jí)、父級(jí)的父級(jí)。。。。。祖宗級(jí)(全局)的變量也不會(huì)被釋放,而且可以被函數(shù)訪問(wèn)到。這就是為什么全局變量在哪里都可以訪問(wèn)的原因了,其實(shí)就是閉包的應(yīng)用。那什么時(shí)候全局變量不可用了呢,就是他內(nèi)部的子函數(shù)引用都被清空的時(shí)候,也就是程序關(guān)閉了,網(wǎng)頁(yè)關(guān)閉了之后。



      1.絕大多數(shù)時(shí)候我們不會(huì)有意識(shí)的用到閉包,但是沒(méi)有閉包你得程序是跑不了的,比如全局變量。。。。。



      2.極少數(shù)情況下我們用函數(shù)去給一個(gè)變量“續(xù)命”。這種情況下,閉包就會(huì)被用到了。



      3.還有就是,如果問(wèn)你:



      JS中沒(méi)有嚴(yán)格意義的私有變量,請(qǐng)問(wèn)你能弄出來(lái)絕對(duì)私有么?答案:能。請(qǐng)看代碼:



      <script>

        //這個(gè)num就是真的嚴(yán)格意義的私有

        let a=(function (){

          let num =0;

          return {

            get(){

              return num;

            },

            set(val){

              num=val;

            }

          }

        })();

        a.set(55);

        console.log(a.get());

      </script>

      這時(shí)a將返回一個(gè)json,里面有兩個(gè)函數(shù),分別是get和set。當(dāng)你在外部給num賦值或者是調(diào)用num時(shí),必須通過(guò)get和set“屬性訪問(wèn)器”去訪問(wèn),否則無(wú)法訪問(wèn)到num變量(真正的私有)。因?yàn)楫?dāng)你不用get和set時(shí)候也就是說(shuō)get和set函數(shù)是不存在的,那么根據(jù)“閉包的原理”num會(huì)被釋放掉,也就是說(shuō)num不存在了,所以你直接num賦值是undefined的。



      3.閉包帶來(lái)了什么問(wèn)題呢?

      這里最為典型的就是for循環(huán)中用var定義循環(huán)變量(var i=0;i<10;i++),循環(huán)的結(jié)果是相同的,就是最后一次運(yùn)算的結(jié)果。這里就涉及到了作用域和閉包的問(wèn)題。詳細(xì)的請(qǐng)看我的這篇文章,本文就不贅述了。



      深入理解js_for循環(huán)條件中使用var為什么會(huì)出問(wèn)題?(js塊級(jí)作用域理解)


      轉(zhuǎn)自:csdn 論壇 作者:韋_恩


      藍(lán)藍(lán)設(shè)計(jì)www.izc.net.cn )是一家專(zhuān)注而深入的界面設(shè)計(jì)公司,為期望卓越的國(guó)內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶(hù)體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 平面設(shè)計(jì)服務(wù)


      日歷

      鏈接

      個(gè)人資料

      存檔

      主站蜘蛛池模板: 国产精品传媒一区二区| 国产精品无码人妻在线| 午夜三级视频| 欧美日韩看片| 骚虎视频在线观看| 精品无码久久久久成人漫画| 撒尿free性hd| 青娱乐国产精品| 国产99在线 | 中文| 国产成_人_综合_亚洲_国产绿巨人 | 久久久久久久久久电影| 国产精品中文字幕自拍| 国产精品免费无码二区| 欧美福利视频| 欧美一区二区免费视频| 亚洲区一区二区三区视频| 国产亚洲日本精品成人专区| 欧美三级视频| 久久精品无码专区| 婷婷五月综合丁香在线| 欧美毛多水多肥妇| 未满十八勿入午夜免费网站| 天天干夜夜怕| 99RE6在线观看国产精品| 亚洲成av人在线观看天堂无码| 一本aⅴ高清一区二区三区| 国产一级片免费在线观看| 国语精品自产拍在线观看网站| 色吊丝av中文字幕| 欧美综合自拍亚洲图久青草| 亚洲国产欧美另类| 国产第100页| 人妻熟妇女的欲乱系列| 福利片在线观看| 美女精品| 久久精品国产99久久6| 亚洲 欧美 日本 国产 高清 | 日韩成人激情| 中文人妻一区二区三区| 亚洲综合无码久久精品综合 | 青青青青青手机视频在线观看视频|