<strike id="g3zqm"></strike>

      <cite id="g3zqm"></cite>

        <tr id="g3zqm"><center id="g3zqm"></center></tr>
        <pre id="g3zqm"><sup id="g3zqm"></sup></pre>
        <li id="g3zqm"></li>
      1. 少妇高潮激情一区二区三,免费av深夜在线观看,亚洲狼人久久伊人久久伊,久久精品人人做人人爽电影蜜月,黄色特级片一区二区三区,欧美日韩在线亚洲二区综二,极品少妇无套内射视频,日本极品少妇videossexhd

        閉包--沒有那么復雜!

        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 論壇 作者:韋_恩


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


        日歷

        鏈接

        個人資料

        藍藍設計的小編 http://m.hengshangtqd.cn

        存檔

        主站蜘蛛池模板: 无码黑人精品一区二区| wwwjizzjizz| av亚洲一区二区在线| 国产在线视频一区二区三区| 免费观看的A级毛片的网站| 97久久超碰国产精品2021| 长腿校花无力呻吟娇喘的视频| 国产亚洲精品久久久久蜜臀| 久久久久久久岛国免费观看| 二成视频在线| 亚洲AV日韩精品久久久久| 色橹橹欧美在线观看视频高清| 日本午夜精品福利视频| 性夜黄a爽影免费看| 中文字幕日韩精品有码| 国产精品日韩av在线播放| 日韩 欧美 中文 亚洲 高清 在线 91精品网站天堂系列在线播放 | 国产老熟女国语免费视频| 人成午夜免费大片| 天天躁狠狠躁狠狠躁夜夜躁 | 99热成人精品热久久66| 亚洲国产精品高清久久久| 三个男吃我奶头一边一个视频| 日本一区二区在线资源| 7777久久亚洲中文字幕| 国产一区二区三区内射高清| 欧美人与拘牲交大全视频| 中文字幕亚洲乱码熟女在线| 人妻少妇av中文字幕乱码| 国产亚洲精品VA片在线播放| 性欧美高清| 一本色道无码DVD色诱| 久久精品国产99久久6动漫| 国产精品女在线观看| 男女激情一区二区三区| 亚洲成av人片在线播放无码| 亚洲欧美在线精品一区二区 | 久久久亚洲色| 亚洲国产成人精品福利在线观看| 国产又色又爽又高潮免费| 国产精品久久久久7777|