js中的閉包是什麼,有什麼用,有什麼缺陷

2021-09-25 14:14:56 字數 1142 閱讀 6392

閉包是可以訪問另乙個函式作用域中變數的函式。簡單地說就是定義在乙個函式內部的另乙個子函式。

閉包可以訪問到函式內部的變數;從而實現封裝。

var person = function(),  

setname : function(newname)

} }();

person.name;//直接訪問,結果為undefined

person.getname(); //結果為 jax

person.setname("jaxhu"); //通過閉包設定person函式內部的變數

person.getname(); //結果為 jaxhu

通過這個的封裝可以實現js中原本沒有的類的概念。

var jax1= person();  

jax1.setname("jax1");

john.getname(); //結果為jax1

var jax2= person();

jax2.setname("jax2");

john.getname(); //結果為 jax2

閉包可以使訪問到的那些變數一直儲存在記憶體當中, 實現快取功能。

如果大量因為閉包引用的變數存留在記憶體中,對於記憶體的消耗會很大,導致影響產品的效能,遇到這樣的情況我們可以在退出函式之前,將不使用的區域性變數全部刪除。

首先我們要了解,js中this的指向是由它所在函式被呼叫時的上下文決定的,而不是由它所在函式定義的上下文決定的。

js中this的指向和執行環境和作用域鏈密不可分,此文不做詳述,我們只需要知道,通常情況下閉包中的this都是指向window。

閉包的使用要根據業務場景和具體邏輯來使用。關於閉包中引用的變數會存留在記憶體中這一點,它既可以是影響你產品效能的乙個被忽略的要素,也可以被利用起來實現一些功能。具體情況具體分析,也配合相應的解決方法。

儲存過程是什麼?有什麼用?有什麼

儲存過程 stored procedure 是一組為了完成特定功能的 sql 語句集,經編譯後存 儲在資料庫中。使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執 行它。儲存過程是 sql 語句和可選控制流語句的預編譯集合,以乙個名稱儲存並作為乙個 單元處理。儲存過程儲存在資料庫內...

CMake是什麼?有什麼用

cmake cmake是乙個跨平台的編譯 build 工具,可以用簡單的語句來描述所有平台的編譯過程。cmake能夠輸出各種各樣的makefile或者project檔案,能測試編譯器所支援的c 特性,類似unix下的automake。假如我們有乙個深度學習框架的部分工程列表,裡面有超過40個互相呼叫...

CMake是什麼?有什麼用?

原創 andrewzhou924 最後發布於2018 05 19 09 05 20 閱讀數 10989 收藏 發布於2018 05 19 09 05 20 分類專欄 學習筆記 展開cmake是乙個跨平台的編譯 build 工具,可以用簡單的語句來描述所有平台的編譯過程。cmake能夠輸出各種各樣的m...