02_javascript數據, 變量與內存

什麼是數據?

存儲於內存中代表特定信息的'東東', 本質就是0101二進制
具有可讀和可傳遞的基本特性
萬物(一切)皆數據, 函數也是數據
程序中所有操作的目標: 數據
    算術運算
    邏輯運算
    賦值
    調用函數傳參
    ...

什麼是內存?

內存條通電後產生的存儲空間(臨時的)
產生和死亡: 
	內存條(集成電路板)==>通電==>產生一定容量的存儲空間
	==>存儲各種數據==>斷電==>內存全部消失
內存的空間是臨時的, 而硬盤的空間是持久的
分配內存: 聲明變量和函數或創建對象時,
          JS引擎會自動爲此分配一定大小的內存來存放對應的數據
釋放內存: 清空內存中的數據,
          標識內存可以再分配使用(內存不釋放就不能複用)
自動釋放: 棧空間的局部變量
垃圾回調器回調: 堆空間的垃圾對象
一塊內存包含2個數據
    * 內部存儲的數據(一般數據/地址數據)
    * 內存地址值數據
內存分類
    * 棧: 全局變量, 局部變量 (空間較小)
    * 堆: 對象 (空間較大)

什麼是變量?

值可以變化的量, 由變量名與變量值組成

一個變量對應一塊小內存, 變量名用來查找到內存,
變量值就是內存中保存的內容

內存,數據, 變量三者之間的關係

內存是一個容器,用來存儲程序運行需要操作的數據

變量是內存的標識, 我們通過變量找到對應的內存,
進而操作(讀/寫)內存中的數據

相關問題

關於賦值與內存的問題?
問題1: var a = xxx, a內存中到底保存的是什麼?
	xxx是一個基本數據
	xxx是一個對象
	xxx是一個變量
關於引用變量賦值問題?
2個引用變量指向同一個對象,
通過一個引用變量修改對象內部數據, 
另一個引用變量也看得見

2個引用變量指向同一個對象,
讓一個引用變量指向另一個對象, 
另一個引用變量還是指向原來的對象
關於數據傳遞問題
只有值傳遞, 沒有引用傳遞, 傳遞的都是變量的值,
只是這個值可能是基本數據, 也可能是地址(引用)數據
如果後一種看成是引用傳遞, 那就值傳遞和引用傳遞都可以有
JS引擎如何管理內存?
內存生命週期
    1). 分配需要的內存
    2). 使用分配到的內存
    3). 不需要時將其釋放/歸還
釋放內存
    1). 爲執行函數分配的棧空間內存: 函數執行完自動釋放
    2). 存儲對象的堆空間內存: 當內存沒有引用指向時, 
        對象成爲垃圾對象, 垃圾回收器後面就會回收釋放此內存
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章