成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

前端閉包在什么時(shí)候用 JavaScript里的閉包是什么?應(yīng)用場景有哪些?

JavaScript里的閉包是什么?應(yīng)用場景有哪些?閉包是指在Javascript中,內(nèi)部函數(shù)總是可以訪問其所在的外部函數(shù)中聲明的參數(shù)和變量,即便外部函數(shù)已經(jīng)被銷毀,閉包任然可以持有它們(參數(shù)或變量)

JavaScript里的閉包是什么?應(yīng)用場景有哪些?

閉包是指在Javascript中,內(nèi)部函數(shù)總是可以訪問其所在的外部函數(shù)中聲明的參數(shù)和變量,即便外部函數(shù)已經(jīng)被銷毀,閉包任然可以持有它們(參數(shù)或變量)

使用場景

很多人可能不清楚閉包是什么,但是在下代碼時(shí)其實(shí)已經(jīng)時(shí)不時(shí)地用到了閉包。比如:

利用閉包實(shí)現(xiàn)私有變量

慎用閉包

閉包是一把雙刃劍,需要慎用。。。

正如它的定義一樣,閉包能夠保存函數(shù)外部的參數(shù)或變量 ,那么外部函數(shù)被銷毀時(shí),被閉包持有的這些參數(shù)或變量,在閉包函數(shù)被銷毀前,是不會(huì)被銷毀的,我們需要清晰地知道,這些閉包函數(shù)它們的銷毀時(shí)機(jī),避免內(nèi)存泄漏 , 比如:


上圖寫了一段偽代碼,Dep中的getProfile方法和該方法訪問的 profile變量構(gòu)成了一個(gè)閉包,這個(gè)閉包被 document 注冊成為了一個(gè)click handler,所以在這個(gè)click handler被注銷之前, 閉包所持有的 profile變量都會(huì)一致停留在內(nèi)存無法釋放,如果開發(fā)者忽略了注銷事件的問題,就會(huì)造成較嚴(yán)重的內(nèi)存泄漏。