• <noscript id="ggggg"><dd id="ggggg"></dd></noscript>
    <small id="ggggg"></small> <sup id="ggggg"></sup>
    <noscript id="ggggg"><dd id="ggggg"></dd></noscript>
    <tfoot id="ggggg"></tfoot>
  • <nav id="ggggg"><cite id="ggggg"></cite></nav>
    <nav id="ggggg"></nav>
    成人黃色A片免费看三更小说,精品人妻av区波多野结衣,亚洲第一极品精品无码,欧美综合区自拍亚洲综合,久久99青青精品免费观看,中文字幕在线中字日韩 ,亚洲国产精品18久久久久久,黄色在线免费观看

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

    2021-4-20    前端達人

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



    目錄



    1.什么是閉包



    2.閉包有什么用?



    3.閉包帶來了什么問題呢?



    4.總結(jié)



     1.什么是閉包

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



    <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)有一個num變量和一個子函數(shù),在子函數(shù)中使用著父函數(shù)a的變量num,使其自加1。隨后將a函數(shù)執(zhí)行后復(fù)制給t,由于子函數(shù)一直在使用num變量(其實不論子函數(shù)是否使用,父函數(shù)的變量都不會釋放,隨時等待子函數(shù)調(diào)用除非子函數(shù)引用被釋放),所以num變量并不會回收釋放。也就是說三次t()改變的num其實是一個。這就是閉包的原因,如果沒有閉包,在子函數(shù)處理完num后,num回收,則應(yīng)該是三個0。



    2.閉包有什么用?

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



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



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



    3.還有就是,如果問你:



    JS中沒有嚴(yán)格意義的私有變量,請問你能弄出來絕對私有么?答案:能。請看代碼:



    <script>

      //這個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>

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



    3.閉包帶來了什么問題呢?

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



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


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


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


    日歷

    鏈接

    個人資料

    藍藍設(shè)計的小編 http://www.lzhte.cn

    存檔

    主站蜘蛛池模板: 久久国产精品99精品国产987| 婷婷五月天影院| 欧美亚洲国产精品第一页| 国产福利在线观看永久免费| 亚洲AV无码不卡私人影院| 中文字幕精品久久天堂一区| 国产永久无码观看在线| 777奇米四色成人影视色区| 韩国主播福利视频一区二区| 人妻少妇看a片偷人精品视频 | 五月花婷婷| 色WWW永久免费视频| 国模偷拍视频一区二区| 延津县| 午夜电影在线观看国产1区 | 久久老子午夜精品无码| 九九热在线视频| 中文字幕不卡在线观看| 国产99欧美精品久久精品久久| 国产色噜噜噜在线精品| 欧美性猛交久久久乱大交小说| 久久九九有精品国产尤物| 亚洲综合伊人久久影院| 精品亚洲成在人线av无码| 香港三日本三级少妇三级视频| 无码任你躁久久久久久久| 国产激情一区二区三区成人免费 | 亚洲一级无毛片无码在线免费视频| 高清国产va日韩亚洲免费午夜电影 | 遂溪县| 亚洲精品国产情侣AV在线| 婷婷六月激情综合一区| 日本xxxxx成年视频软件| 一本大道久久a久久综合| 欧美性猛交XXXX黑人猛交| 欧美人成片免费看视频| 足交视频网站| www欧美日韩| 亚洲愉拍99热成人精品热久久| 国产jizzjizz全部免费观看| 国产一级特黄aa级特黄裸毛片|