前端常見問題之 閉包篇

2021-10-05 10:22:47 字數 697 閱讀 9904

閉包實際上在寫**的時候用到過很多遍,但是想要真正把它解釋清楚卻不容易。當然,這也是前端核心之一。開始吧

一:變數的作用域

變數的作用域無非兩種:全域性作用域和塊級作用域(也就是在{}中的變數)

全域性作用域:全域性作用域可以被所有的函式所訪問,即函式內部可以直接讀取全域性變數

塊級作用域:變數只在{}範圍內可以被訪問到,即外部並不能訪問到函式內部變數

二:如何從外部讀取到區域性變數?

正常情況下當然是不行的。那麼可以轉個彎想,如果在乙個函式a內部再定義乙個函式b,那麼函式b是不是就可以訪問到函式a中的值了,接著返回函式b。這樣我們不是就可以在外部讀取到函式a中的區域性變數了嗎

functiona(

)returnb;

}var result=a(

);result()

;//彈出99

三.什麼是閉包?

簡單的看,上述例子就是閉包

四.閉包的特點?

讓外部訪問函式內部變數成為可能;

區域性變數會常駐在記憶體中;

可以避免使用全域性變數,防止全域性變數汙染;

會造成記憶體洩漏(有一塊記憶體空間被長期占用,而不被釋放)解決方法是,在退出函式之前,將不使用的區域性變數全部刪除。

閉包常見問題及解決方案

閉包常見的問題就是在無形之中幾個閉包共享同樣的變數,導致結果與預期不符。html doctype html html head meta charset utf 8 title closure test title style hidden visible style head body ul id...

bootstrap table前端常見問題

1.js檔案中,jquery傳送ajax請求,瀏覽器報405的錯誤,原因 ajax中提交的是post請求,springmvc的controller中註解中用的是get接收的,因此報錯。2.varform newformdata addroleform 0 formdata直接在js中檢視是空的,但傳...

linux常見問題(程式設計篇)

0001 linux下除錯core檔案 gdb 出錯產生core dump的可執行程式。core dump的檔名,預設是 core 0002 gcc abc.c得到的a.out不能執行 a.out 0003 c 編譯時為什麼出錯資訊說cout沒定義 include標頭檔案完後加入 using nam...