• <center id="sm46c"></center>
  • <dfn id="sm46c"></dfn>
  • <strike id="sm46c"></strike>
  • <cite id="sm46c"><source id="sm46c"></source></cite>
    • <strike id="sm46c"><source id="sm46c"></source></strike>
      <option id="sm46c"></option>
      国产精品天天看天天狠,女高中生强奷系列在线播放,久久无码免费的a毛片大全,国产日韩综合av在线,亚洲国产中文综合专区在,特殊重囗味sm在线观看无码,中文字幕一区二区三区四区在线,无码任你躁久久久久久老妇蜜桃

      閉包--沒有那么復雜!

      2021-4-20    前端達人

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



      目錄



      1.什么是閉包



      2.閉包有什么用?



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



      4.總結



       1.什么是閉包

      通俗的理解就是:子函數使用著父函數作用域內的變量,導致父函數作用域內的變量無法回收釋放的這種情況。



      <script>

      function a(){

         let num=0;

         return ()=>{

           console.log(num++);

         }

      };

      let t=a();

      //執行三次結果是多少?

      t();

      t();

      t();

      </script>

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







      結果是0,1,2,這是怎么回事呢?原因就是閉包導致的。



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



      2.閉包有什么用?

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



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



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



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



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



      <script>

        //這個num就是真的嚴格意義的私有

        let a=(function (){

          let num =0;

          return {

            get(){

              return num;

            },

            set(val){

              num=val;

            }

          }

        })();

        a.set(55);

        console.log(a.get());

      </script>

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



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

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



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


      轉自:csdn 論壇 作者:韋_恩


      藍藍設計www.li-bodun.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服


      日歷

      鏈接

      個人資料

      藍藍設計的小編 http://www.li-bodun.cn

      存檔

      主站蜘蛛池模板: 蜜臀av性久久久久蜜臀aⅴ麻豆| 18禁无遮挡啪啪无码网站破解版| 99久久国产热无码精品免费| 亚洲第一区无码专区| 亚洲精品另类| 国产成人成网站在线播放青青| V一区无码内射国产| 免费a级毛片18以上观看精品| 自拍偷拍另类三级三色四色| 日本中文字幕亚洲乱码| 成av免费大片黄在线观看| 亚洲人成网站在小说| 国产成人免费视频精品| 国产精品天堂avav在线| 国产亚洲视频播放9000| 欧美国产国产综合视频| 日韩精品无码区免费专区| 亚洲国产在一区二区三区| 亚洲制服丝袜一区二区三区| 国产成人精品97| 98日韩精品人妻一二区| 2019亚洲午夜无码天堂| 欧美丰满熟妇xxxx| 久久久中日ab精品综合| 亚洲国产福利成人一区二区| 粉嫩蜜臀av一区二区三区| 69精品在线观看| 99热这里只有精品国产66| 欧美va亚洲va在线观看| 亚洲AV无码专区国产乱码电影| 亚洲国产综合专区在线播放| 色噜噜狠狠狠综合曰曰曰| 97国产露脸精品国产麻豆| 国产精品亚洲综合一区二区| 麻豆91久久婷婷五月| 无码精品毛片波多野结衣| 国产精品一区在线蜜臀| 99久久精品国产精品亚洲| 动漫av网站免费观看| 久久激情影院| 国产在线98福利播放视频|