国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質的職業(yè)教育機構

            手機站
            千鋒教育

            千鋒學習站 | 隨時隨地免費學

            千鋒教育

            掃一掃進入千鋒手機站

            領取全套視頻
            千鋒教育

            關注千鋒學習站小程序
            隨時隨地免費學習課程

            當前位置:首頁  >  技術干貨  > 如何講清楚閉包?

            如何講清楚閉包?

            來源:千鋒教育
            發(fā)布人:qyf
            時間: 2022-10-10 16:20:23 1665390023

              我們都知道一個概念。

              在JS當中,一個函數(shù)可以訪問其外部的變量資源。

            圖片 1

              但以下這種情況會出錯。

              function m1(){

              var a = 100;

              console.log(a++);

              }

              function m2(){

              console.log(a++); //這里無法訪問a

              }

              如果,我們想在m2的作用域里,訪問m1里的變量,就像下面這樣:

            圖片 2

              首先,我們可以在m1的內部創(chuàng)建一個函數(shù)m3

              function m1(){

              var a = 100;

              function m3(){

              console.log(a++);

              }

              }

            圖片 3

              m3可以正常訪問a,接下來我們增加一個return操作。

              function m1(){

              var a = 100;

              return function m3(){

              console.log(a++);

              }

              }

              既然有了返回值,那我們不妨接收一下,繼續(xù)編寫代碼如下:

              function m1(){

              var a = 100;

              return function m3(){

              console.log(a++);

              }

              }

              var _m3 = m1();

              我們執(zhí)行了函數(shù)m1, 并將返回值賦值給_m3,

              那么目前_m3和m3函數(shù)是等價的,即它們是同一個函數(shù)。

              有了_m3,一切都好辦了。我們繼續(xù)編寫代碼

              function m1(){

              var a = 100;

              return function m3(){

              console.log(a++);

              }

              }

              var _m3 = m1();

              function m2(){

              _m3();

              }

              因為_m3是全局變量,因此m2可以調用_m3

              也就等價于m2間接的,訪問到了變量a

            圖片 4

              通常,我們管m3,叫做一個『 閉包函數(shù) 』

              下面列舉幾個常見的閉包場景:

              01

              for(var i=0; i<list.length; p="" i++){<="">

              var item = list[i];

              item.onclick = (function(num){

              return function(){

              //......

              }

              })(i);

              }

              02

              function (){

              var that = this;

              setTimeout(function(){

              //......

              },2000)

              }

              03

              function User(){

              var _age = 0;

              this.getAge = function(){

              return _age;

              }

              this.setAge = function(age){

              this._age = age;

              }

              }

              04

              (function(){

              var cache = [...];

              return {

              get : function(){

              //...

              }

              };

              })()

              05

              (function(){

              var t = null;

              return function(){

              if(!t){

              t = create();

              }

              }

              })()

              為了創(chuàng)造閉包,有時候會寫函數(shù)自調用

              可以不這么麻煩么??

              當然,那就是使用let。

              例如

              for(let i=0; i<list.length; p="" i++){<="">

              let item = list[i];

              item.onclick = function(){

              console.log(i);

              //觀察變量i的值

              };

              }

              關于閉包的疑問

              當函數(shù)m1執(zhí)行完成的時候,內部的變量a,理論上應該被回收掉了。

            圖片20

              可是為什么變量a依然可以被訪問呢?

              主要是因為,m3還在引用它

            圖片21

              垃圾回收器顯然不會回收一個依然被引用的變量。

              除非這個變量,已經無人引用,即是說,它已經無法再內存里被找到。

              此時才可以當做垃圾處理。

              不過m3可以訪問變量a這種規(guī)則,并不是在所有編程語言里都生效的。因此,這也算是JS的特性之一。

            tags:
            聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
            10年以上業(yè)內強師集結,手把手帶你蛻變精英
            請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
            免費領取
            今日已有369人領取成功
            劉同學 138****2860 剛剛成功領取
            王同學 131****2015 剛剛成功領取
            張同學 133****4652 剛剛成功領取
            李同學 135****8607 剛剛成功領取
            楊同學 132****5667 剛剛成功領取
            岳同學 134****6652 剛剛成功領取
            梁同學 157****2950 剛剛成功領取
            劉同學 189****1015 剛剛成功領取
            張同學 155****4678 剛剛成功領取
            鄒同學 139****2907 剛剛成功領取
            董同學 138****2867 剛剛成功領取
            周同學 136****3602 剛剛成功領取
            相關推薦HOT