2017-08-30 52 views
0

我發現.length = 0有一些問題,現在如果我更改爲= [],在我的javascript項目中所有的東西都運行良好。什麼時候沒有指針變量在javascript中消失?

var arr = [1,2,3,4,5]; 
alert(arr); 
arr = []; 
alert(arr); 
arr.length = 0; 
alert(arr); 

但是我有一個問題,如果我使用arr = [],當內存[1,2,3,4,5]消失?如果數組很大並且我多次使用[],則會導致內存不足問題。

+0

*「我發現一些問題與'.length = 0'」*小心分享? –

+0

你可以看到我的堆棧問題https://stackoverflow.com/questions/45924788/angular-appending-is-fast-but-destroying-is-slow1-second這裏我改變.length = 0到= []並解決了問題 –

回答

0

但我有一個問題,如果我使用arr = [],當[1,2,3,4,5]的內存消失?

每當JavaScript引擎開始釋放它時,它將會在必要時執行,並且在必要時一旦沒有任何引用了它就可以了。細節不僅取決於所涉及的JavaScript引擎,還取決於代碼的出現位置以及運行頻率(例如,最終如何進行優化)。如果它很重要(例如,這是經營很多),它會很快恢復。

+0

我想要你來描述爲什麼這篇文章可用https://stackoverflow.com/questions/4804235/difference-between-array-length-0-and-array根據你的答案。 –

+0

@artgb:我不明白你評論中的問題......? –

+0

你說如果我使用arr = [],內存空間將自動消失,爲什麼需要.length = 0? –

0

你的問題歸結爲各種Javascript引擎如何執行垃圾回收。雖然他們每個人做的都略有不同,但允許他們清理分配內存的關鍵是確保原始數組中沒有延遲引用(包括通過閉包或異步調用)。

如果該數組已被傳遞到另一個仍在堆棧中的函數或它自己在閉包中,那麼會更復雜。

相關問題