JavaScript之閉包

翻牆的小哲?發表於2018-05-12

閉包

  1. 是通過呼叫函式,產生臨時的記憶體空間
  2. js是一門指令碼語言,載入js有兩個步驟: 1.載入定義(預載入)   2.執行程式碼
  3. 載入定義: var a;   //定義物件 
  4.      function m();   //定義方法
  5. 閉包特性:閉包中的變數,外部不能訪問(保護內部,防止變數汙染)

———————————————————————————-

匿名函式: (function(){} () )

有名函式: var util=function(){}

———————————————————————————-

區別:   function fun() {   console.log(1)   }     fun();//呼叫

  var fun=function(){   console.log(1)  }    

兩者結果都是列印出  1 。  但兩者有何區別呢???

其實就是就是前者開闢一個棧空間,而後者先開闢堆空間,再開闢棧空間 ,共開闢兩個空間

 

jquery庫原始碼解析後其實就是我們熟悉的閉包: ( function() {}   () ),有興趣可以去試試

———————————————————————————–

閉包例子幫助理解什麼是閉包:

閉包具有就近原則,先找離自身最近的物件,如果找不到會像冒泡事件,一層一層往外層查詢,直到找到物件。同時外部無法改變內部的屬性。

var golbal=”nike”

(function(golbal,tag){

  console.log(golbal);

  console.log(tag);    

}(window,123))

//列印結果: window

      123

 

再來一個案例:

var util=(function(){    //var util是暴露介面,已便呼叫傳入

  return:{

      sayname:function(name){

        console.log(`hello ,`+name)

      }

    }

}())

  util.sayname(“Arthur”)

//列印結果 hello , Arthur

 

————————————————————————————–

怎麼說呢,閉包是個好東西,要多使用,你會發現現在大多數人寫js都是使用閉包的方法。因為它具有良好的特性。

 

相關文章