閉包就是能夠讀取其他函式內部變數的函式,在js中,只有函式內部的子函式才能讀取區域性變數,這就造成的一些使用時的不便。而閉包函式的作用就是,像一座橋梁一樣將函式內部和函式外部連線起來。可以保護變數,避免汙染。
函式a內部直接或間接返回乙個函式b
b函式內部使用函式a內部的私有變數/私有資料
a函式內部有乙個變數接受著函式b
在函式執行的時候,會開闢乙個執行空間,所有的**都會在這個空間裡執行,執行完畢以後,這個空間會自動銷毀。
閉包函式則會形成乙個不會銷毀的執行空間(如下圖)a函式的執行空間,就叫做閉包空間。其中return的b函式叫做a函式的閉包函式。(b函式訪問了a函式的私有變數)
但是這個不會銷毀的執行空間,會造成資料快取,影響網頁效能(使用過後需要及時釋放)
陣列作為返回值
當你返回值是乙個陣列的時候,閉包就形成了。我們定義了乙個res用來接受fn中return的陣列,這時就形成了閉包空間,執行完第乙個console.log(res)後,執行空間並不會消失。
當我們給res又定義了乙個「值」的時候(讓res指向別的位置),函式內部返回的複雜資料型別就沒有被接收,閉包空間就會被銷毀,再次執行console.log(res)時,就無法訪問fn內部空間了。
閉包的存在,可以避免新增太多的全域性函式和全域性變數,減少命名衝突。避免全域性汙染。但是閉包的缺點也很明顯,所以,我們應該熟練掌握,在應用的時候,更加得心應手。
作為乙個js新手,有很多知識點掌握的不夠牢固,努力學習ing,以上是則是我對閉包的一些理解,希望大家多多指正。多多批評。
對js閉包的理解
在w3c和網上其他地方看了一下閉包,記錄一下個人理解。個人認為,閉包就是乙個函式內包含另乙個函式 然後函式外可以呼叫另乙個函式內的變數或函式返回值。看到這,大家都會覺得。還要你說,傻子都知道。但是,事實就是如此,來段 window.onload function function doreduce ...
對閉包的理解
閉包是什麼 答 閉包就是能夠讀取其他函式內部變數的函式。閉包函式生效的兩個條件 1 必須先定義乙個匿名函式 2 必須要執行一次匿名函式生成閉包函式 匿名函式 匿名函式 demo1 function name 呼叫匿名函式 echo demo1 張無忌 匿名函式也有自己的作用域,除了傳參,還有什麼方式...
理解js的閉包
閉包 將內部函式儲存到外部時,將會生成閉包。閉包會導致原有的作用域鏈不釋放,造成記憶體洩漏。先來看乙個閉包的例子 functiona returnb vartemp a temp temp 此時輸出結果是2 和3,函式b和a形成了閉包,函式b被儲存到外部。functiontest functionb...