js閉包函式為什麼有記憶體洩漏的問題存在

2021-04-18 16:56:43 字數 837 閱讀 5485

1樓:匿名使用者

給你寫個簡單的例子你就明白了

例:function a())();

}a();

說明:按理來說b時屬於a中的一個區域性變數,是會在呼叫a時建立,呼叫完銷燬的變數,但a中有一個閉包也就是其中的匿名函式呼叫了b,所以記憶體**認為b是被引用的,因此在**的時候不會釋放它。所以b一直存在記憶體中,而外部卻不能呼叫這個變數,這就產生了記憶體洩漏。。。。

純手打,求採納。

2樓:匿名使用者

呼叫c() 就是呼叫 a(),這個地方有問題。

a()是個閉包,裡面內容就是返回b().

這個閉包的呼叫方式,應該這樣 a()(); 所以剛才說的問題就在這裡了。

var c = a(); 是將這個閉包的引用傳給c.

我們是不是可以理解為 這個c現在有個成員變數i和一個成員方法b,它的返回值指向這個成員函式。

閉包的好處時,區域性變數在函式返回後被訪問。

也就是說,當執行了c()後,當中的變數i就被銷燬了,但是卻可以在成員方法b中得以保留。

可以通過呼叫兩次c() 和 兩次 a()() 來**區別。

3樓:匿名使用者

閉包,比如下面

var o = (function()

}})();

上面的**是閉包的一種實現,在執行o.init();的時候,o的作用域應該是全域性的,此時init函式能訪問o的區域性變數name,而且,因為o是全域性變數,所以閉包之內的所有變數和函式都會在執行上下文中的棧中,不會隨著函式呼叫結束而結束。

像上面的程式如果很多一起執行,記憶體不會釋放,當然會出現記憶體洩露了

有充足的實體記憶體為什麼還要用虛擬記憶體

虛擬記憶體的使用意義是 實體記憶體中處於不活動的程式 資料,系統每過一段時間都會自動將其調出實體記憶體到虛擬記憶體中,以便騰出足夠的實體記憶體空間給即將處於活動狀態的程式或資料使用,這在早先的低配置中意義顯得大些。所以即便實體記憶體很大的話,也會用到虛擬記憶體的,只是用的多少有區別而已。不建議將虛擬...

波函式到底有什麼聯絡,為什麼波函式的平方就是電子雲

電子雲的角度分佈來圖是對波函自數的角度分佈的平方的積分.電子雲分佈函式,薛定諤方程的解稱為波函式,波爾認為波函式模的平方能作為發現微觀電子的概率.電子的波函式可分成徑向部分r r 和角度部分y 所以r2 r 是反映在任意給定角度上電子雲密度隨r的變化,稱作徑向密度函式.而d r 才是徑向分佈函式指半...

有了解coach包的麼,為什麼國外買的要比國內貴很多

塞班的 比其他的免稅店貴一點 不過這個包包3000也不算貴 畢竟這款是專賣店點的款式 不是奧萊款 那些感覺不靠譜,畢竟在專櫃買的自己放心 自從自己賣這個牌子的鼠貨後,沒去過專櫃了。感覺賣的都是品牌價值。什麼是體驗式商業 體驗式商業,它區別於傳統商業的以零售為主的業態組合形式,更注重消費者的參與 體驗...