閉包(2) 閉包的現象與作用

2021-08-21 16:57:34 字數 882 閱讀 7580

閉包的現象:當內部的函式被儲存在外部時,將會生成閉包。閉包會導致原有的作用域鏈不釋放,造成記憶體洩漏(占用的多了,剩下的就少了)。

閉包的作用:

1.實現公用變數eg:函式累加器

function add()

return demo;

} var counter = add();

counter();

counter();

counter();

counter();

2.可以做快取(儲存結構)eg:eater

function test()

function b()

return [a,b];//陣列第一位放的是函式a,第二位放的是函式b

} var myarr = test();

myarr[0]();//a

myarr[1]();//101 100

形成閉包嗎?a和test形成的閉包與b和test形成的閉包公用的是不是乙個test的ao?如果公用的是乙個他的ao的話,那他改,他一定也跟著改,是吧。test裡放再多,他們連的線都是test的勞動成果。test相當於乙個父親,a大兒子,b是小兒子,

他倆拿的錢不是乙個爹的嗎?必須是乙個啊。所以a被儲存出來之後,他身上有乙個被定義的狀態是:test的ao連著go對吧。b被儲存出來之後是test的ao連著go

,他倆test的ao連著go是乙個人,完全一樣的。a和test形成乙個閉包,b也和test形成乙個閉包,但是a在用test的時候是在100的基礎上去改的數,改完之後,b在a改完的基礎上再用。

3.可以實現封裝,屬性私有化eg:person();

4.模組化開發,防止汙染全域性變數

閉包 閉包作用之儲存 一

函式執行形成乙個私有作用域,函式執行完成,開成的這個棧記憶體一般情況下都會自動釋放 函式執行完成,當前私有作用哉 棧記憶體 中的某一部分內容被記憶體以外的其它東西 變數 元素的事件 占用了,當前的棧記憶體就不能釋放掉,也就形成了不銷毀的私有作用域 裡面的私有變數也不會銷毀 函式內部可以訪問函式外部的...

作用域與閉包

執行上下文 範圍 一段或者乙個函式 全域性 變數定義 函式宣告 一段 函式 變數定義 函式宣告 this arguments 函式 ps 注意 函式宣告 和 函式表示式 的區別 console.log a var a 100 fn zhangsan function fn name this thi...

作用域與閉包

變數存在並產生作用的環境上下文。在es5規範中只有兩種作用域 函式可以巢狀,而每個函式都有自己的作用域,當進入乙個函式的時候,函式環境就會被壓入乙個環境棧當中,當函式執行完畢之後又會出棧,將控制權轉交給外面一層的函式。內部呼叫外部 var a 3 function add add console.l...