閉包
- 是通過呼叫函式,產生臨時的記憶體空間
- js是一門指令碼語言,載入js有兩個步驟: 1.載入定義(預載入) 2.執行程式碼
- 載入定義: var a; //定義物件
- function m(); //定義方法
- 閉包特性:閉包中的變數,外部不能訪問(保護內部,防止變數汙染)
———————————————————————————-
匿名函式: (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都是使用閉包的方法。因為它具有良好的特性。