什麼是數據?
存儲於內存中代表特定信息的'東東', 本質就是0101二進制
具有可讀和可傳遞的基本特性
萬物(一切)皆數據, 函數也是數據
程序中所有操作的目標: 數據
算術運算
邏輯運算
賦值
調用函數傳參
...
什麼是內存?
內存條通電後產生的存儲空間(臨時的)
產生和死亡:
內存條(集成電路板)==>通電==>產生一定容量的存儲空間
==>存儲各種數據==>斷電==>內存全部消失
內存的空間是臨時的, 而硬盤的空間是持久的
分配內存: 聲明變量和函數或創建對象時,
JS引擎會自動爲此分配一定大小的內存來存放對應的數據
釋放內存: 清空內存中的數據,
標識內存可以再分配使用(內存不釋放就不能複用)
自動釋放: 棧空間的局部變量
垃圾回調器回調: 堆空間的垃圾對象
一塊內存包含2個數據
* 內部存儲的數據(一般數據/地址數據)
* 內存地址值數據
內存分類
* 棧: 全局變量, 局部變量 (空間較小)
* 堆: 對象 (空間較大)
什麼是變量?
值可以變化的量, 由變量名與變量值組成
一個變量對應一塊小內存, 變量名用來查找到內存,
變量值就是內存中保存的內容
內存,數據, 變量三者之間的關係
內存是一個容器,用來存儲程序運行需要操作的數據
變量是內存的標識, 我們通過變量找到對應的內存,
進而操作(讀/寫)內存中的數據
相關問題
關於賦值與內存的問題?
問題1: var a = xxx, a內存中到底保存的是什麼?
xxx是一個基本數據
xxx是一個對象
xxx是一個變量
關於引用變量賦值問題?
2個引用變量指向同一個對象,
通過一個引用變量修改對象內部數據,
另一個引用變量也看得見
2個引用變量指向同一個對象,
讓一個引用變量指向另一個對象,
另一個引用變量還是指向原來的對象
關於數據傳遞問題
只有值傳遞, 沒有引用傳遞, 傳遞的都是變量的值,
只是這個值可能是基本數據, 也可能是地址(引用)數據
如果後一種看成是引用傳遞, 那就值傳遞和引用傳遞都可以有
JS引擎如何管理內存?
內存生命週期
1). 分配需要的內存
2). 使用分配到的內存
3). 不需要時將其釋放/歸還
釋放內存
1). 爲執行函數分配的棧空間內存: 函數執行完自動釋放
2). 存儲對象的堆空間內存: 當內存沒有引用指向時,
對象成爲垃圾對象, 垃圾回收器後面就會回收釋放此內存