2、數據、內存和變量

  1. 什麼是數據?
  • 存儲在內存中代表特定信息的'東東', 本質上是0101...
  • 數據的特點: 可傳遞, 可運算
  • 一切皆數據, 函數也是數據
  • 內存中所有操作的目標: 數據
    • 算術運算
    • 邏輯運算
    • 賦值
    • 運行函數

  1. 什麼是內存?
  • 內存條通電後產生的可儲存數據的空間(臨時的)
  • 內存產生和死亡: 內存條(電路版)>通電>產生內存空間>存儲數據>處理數據>斷電>內存空間和數據都消失
  • 一塊小內存的2個數據
    • 內部存儲的數據(一般數據/地址數據)
    • 地址值數據
  • 內存空間的分類
    • 棧: 全局變量/局部變量
    • 堆: 對象(空間較大)

  1. 什麼是變量?
  • 在程序運行過程中值是允許改變的量, 由變量名和變量值組成

  • 每個變量都對應的一塊小內存, 變量名用來查找對應的內存, 變量值就是內存中保存的數據

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

    • 內存是容器, 用來存儲不同數據
    • 變量是內存的標識, 通過變量我們可以操作(讀/寫)內存中的數據

  1. 相關問題
  • 關於賦值和內存的問題
    問題: var a = xxx, a內存中到底保存的是什麼?
    • xxx是基本數據, 保存的就是這個數據
    • xxx是對象, 保存的是對象的地址值
    • xxx是一個變量, 保存的xxx的內存內容(可能是基本數據, 也可能是地址值)
  • 關於引用變量賦值問題
    • 2個引用變量指向同一個對象, 通過一個變量修改對象內部數據, 另一個變量看到的是修改之後的數據
    var obj1 = {name: 'Tom'}
    function fn (obj) {
      obj.name = 'A' //操作對象
    }
    fn(obj1)
    console.log(obj2.name) //A
    
    • 2個引用變量指向同一個對象, 讓其中一個引用變量指向另一個對象, 另一引用變量依然指向前一個對象
    a = {name: 'BOB', age: 13}
    function fn2 (obj) {
      obj = {age: 15} //重新賦值
    }
    fn2(a)
    console.log(a.age) // 13
    
  • 關於數據傳遞問題
    問題: 在調用函數時傳遞變量參數時, 是值傳遞還是引用傳遞?
    • 理解1: 都是值(基本/地址值)傳遞
    • 理解2: 可能是值傳遞, 也可能是引用傳遞(地址值)
  • 內存管理
    問題: JS引擎如何管理內存?
    1. 內存生命週期
    • 分配小內存空間, 得到它的使用權
    • 存儲數據, 可以反覆進行操作
    • 不需要時將其釋放/歸還
    1. 釋放內存
    • 爲執行函數分配的棧空間內存: 函數執行完 自動釋放
    • 存儲對象的堆空間內存: 成爲垃圾對象==> 垃圾回收器回收
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章