- 寫在前面:參考嗶哩嗶哩黑馬程式員pink老師教程
- 地址:https://www.bilibili.com/video/BV1Sy4y1C7ha?t=41&p=4
目錄
簡單型別與復雜型別
簡單型別與復雜型別
堆疊空間分配區別
簡單型別的記憶體分配
復雜型別的記憶體分配
簡單型別傳參
復雜型別傳參
簡單型別與復雜型別
簡單型別與復雜型別
- 簡單型別又叫做基本資料型別或者值型別,復雜型別又叫做參考型別,
- 值型別:簡單資料型別/基本資料型別,在存盤時變數中存盤的是值本身,因此叫做值型別string ,number,boolean,undefined,null
- 參考型別:復雜資料型別,在存盤時變數中存盤的僅僅是地址(參考),因此叫做參考資料型別通過 new 關鍵字創建的物件(系統物件、自定義物件),如 Object、Array、Date等
// 簡單資料型別 null 回傳的是一個空的物件 object var timer = null; console.log(typeof timer); // 如果有個變數我們以后打算存盤為物件,暫時沒想好放啥, 這個時候就給 null // 1. 簡單資料型別 是存放在堆疊里面 里面直接開辟一個空間存放的是值 // 2. 復雜資料型別 首先在堆疊里面存放地址 十六進制表示 然后這個地址指向堆里面的資料堆疊空間分配區別
- 堆疊(作業系統):由作業系統自動分配釋放存放函式的引數值、區域變數的值等,其操作方式類似于資料結構中的堆疊;
- 簡單資料型別存放到堆疊里面
- 堆(作業系統):存盤復雜型別(物件),一般由程式員分配釋放,若程式員不釋放,由垃圾回識訓制回收,
- 復雜資料型別存放到堆里面
簡單型別的記憶體分配
- 值型別(簡單資料型別): string ,number,boolean,undefined,null
- 值型別變數的資料直接存放在變數(堆疊空間)中
復雜型別的記憶體分配
- 參考型別(復雜資料型別):通過 new 關鍵字創建的物件(系統物件、自定義物件),如 Object、Array、Date等
- 參考型別變數(堆疊空間)里存放的是地址,真正的物件實體存放在堆空間中
簡單型別傳參
- 函式的形參也可以看做是一個變數,當我們把一個值型別變數作為引數傳給函式的形參時,其實是把變數在堆疊空間里的值復制了一份給形參,那么在方法內部對形參做任何修改,都不會影響到的外部變數,
// 簡單資料型別傳參 function fn(a) { a++; console.log(a); } var x = 10; fn(x); console.log(x); 輸出:11 10復雜型別傳參
- 函式的形參也可以看做是一個變數,當我們把參考型別變數傳給形參時,其實是把變數在堆疊空間里保存的堆地址復制給了形參,形參和實參其實保存的是同一個堆地址,所以操作的是同一個物件,
// 復雜資料型別傳參 function Person(name) { this.name = name; } function f1(x) { // x = p console.log(x.name); // 2. 這個輸出什么 ? 劉德華 x.name = "張學友"; console.log(x.name); // 3. 這個輸出什么 ? 張學友 } var p = new Person("劉德華"); console.log(p.name); // 1. 這個輸出什么 ? 劉德華 f1(p); console.log(p.name); // 4. 這個輸出什么 ? 張學友
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/80155.html
標籤:其他
下一篇:一位三十歲女程式員的面試苦惱
