閉包是指有權訪問另乙個函式作用域中的變數的函式,並且在閉包內部形成乙個外部無法訪問的區域性作用域。
建立閉包的常見方式是在乙個函式內部建立另乙個函式。通過另乙個函式訪問這個函式的區域性變數,利用閉包可以突破作用鏈域,將函式內部的變數和方法傳遞到外部。
閉包是一種機制
函式要訪問乙個變數的時候,就會先從自己的作用域開始,逐步向外層函式的作用域尋找那個變數的值。
簡而言之就是外層函式不能訪問內層,內層能訪問外層。
優點
加強封裝性,可以達到對變數的保護作用。
缺點
由於閉包內部變數優先順序高於外部變數,所以多查詢作用域鏈中的乙個層次,就會在一定程度上影響查詢速度。
記憶體浪費,如下:
function
teachersinfo
(propertyname)
}//建立函式
var getteachers =
teachersinfo
('name');
//呼叫函式
var resule =
getteachers(,
,)console.
log(resule)
;//朱一 - 朱二
getteachers =
null
;//釋放這個控制代碼
知識點
當執行函式teachersinfo時,函式的作用域鏈包括活動物件(引數propertyname)和全域性變數物件,當函式teachersinfo執行完畢後,其活動物件也不會被銷毀,因為匿名函式的作用域鏈仍然在引用這個活動物件。
getteachers 指向的是匿名函式的位址,所以最後需要釋放這個控制代碼。
白店小二的面試總結 Vuex裡怎麼操作狀態
1 在state裡定義狀態 const state this store.state.list.songslist 使用state裡的資料,將其賦值給乙個變數。2 在mutations裡更改state的狀態 像是事件註冊,定義乙個函式,當想要改變state的值時,呼叫 store.commit 方法...
白店小二的js知識 基礎
值型別 基本型別 字串 string 數字 number 布林 boolean 對空 null 未定義 undefined symbol。引用資料型別 物件 object 陣列 array 函式 function 注 symbol 是 es6 引入了一種新的原始資料型別,表示獨一無二的值。小知識 基...
白店小二手搓穿梭框
想當初我大四實習第一次面試的時候,機試題就是手寫出來穿梭框,不能用元件裡帶的,我當時在那傻坐了乙個多小時,也沒寫出來,尷尬!確實當時對於框架 元件都是能使用,但是不能問,問就是不會,更別說讓我寫個原生的了,理所當然的面試失敗,這也就成了我的乙個執念,我當時就想著我一定要自己把穿梭框給手搓出來,於是它...