學習js先把記憶體管理想清楚

2022-05-16 19:43:06 字數 892 閱讀 7588

對於任何語言來講,不管他們是如何定義自己語言的規則,目的只有乙個,那就是操作記憶體資料(如何從記憶體裡取資料,如何操作取出來的資料,然後如何把操作後的資料放進去),js雖然是弱型別的語言(在記憶體開闢的變數型別歸屬會根據使用情況的變化而變化),但萬變不離其宗,那就是怎麼也逃不出值型別和引用型別兩大資料型別,這兩大型別有自己的規則,那就是不能互相變換,但這裡有個問題可能大家覺得很奇怪:

?string.prototype.name="";

var val=23;

alert(val.name);彈出「」

(注:下面說的型別就是引用型別和值型別的區分)

有些人可能就要問為什麼作為值型別的val變數可以像物件一樣的形式來訪問呢,是不是它就轉成引用型別的資料了呢?!那我來告訴你,這裡val根本就沒有變它的型別,說過每個語言它都有自己的規則,這個規則就是程式在執行val.name的時候,它會瞬時地在棧中開闢一塊空間放類似如下**(val=new number(),val.name),記住哦,這裡說的是瞬時,執行完這行**後,立即銷毀建立的引用物件,這時val堆空間就又回到指向原來的值型別的資料了,所以後面你以為可以通過如下val.age=23; alert(val.age);是錯誤的,因為到這裡已經是值型別資料23了,23當然不能開闢屬性值了。

如果你還不好理解的話,送上圖一張:

對照圖去理解上面講的,後續會繼續分析js是如何圍繞記憶體定義自己的規則進行操作記憶體資料的!!

總之記住一句話,我們學的是語言的規則,記憶體的資料是任何語言的目標物件(所有語言基本差不多),唯一的差別是規則

一種理想狀態下的記憶體管理

看到csdn上有人提問,我就把自己的想法寫下了。對於大專案,尤其是頻繁記憶體操作的高效能專案 系統的記憶體管理功能不那麼好使的。當然,對於一些自帶記憶體管理功能的語言來說,在一定程度上,另當別論。對於你所說的情況,建議在系統啟動時候,分配足夠多的記憶體,然後自己管理。最簡單的情況,當然是假設你的鍊錶...

IOS 學習筆記14 記憶體管理(2)記憶體管理策略

文章中帶有lpstudy的字樣表明是我個人的理解,可能會有不對的地方,敬請指教。html view plain copy 記憶體管理策略 在引用計數機制下,你可以採用nsobject protocol的方法和和標準的方法命名約定進行記憶體管理。nsobject也定義了乙個dealloc方法,它在物件...

iOS知識學習 記憶體管理

記憶體管理是在程式執行期間分配記憶體,使用並釋放的過程。乙個好的程式會盡可能的用很少的記憶體。當你的程式結束的時候,你要知道如何去管理應用程式的記憶體,不需要的物件要釋放掉。記憶體管理的示例圖如下 從圖中可以看出,當沒有指標指向某個物件的時候,這個物件將會被摧毀。objective c提供了兩種記憶...