1. 程式人生 > 其它 >js中的記憶體空間

js中的記憶體空間

目的:

1、如果不瞭解儲存位置在程式中可能出現出乎意料的值改變

2、可以很好的瞭解閉包

3、可以對效能優化有一定分析能力提升

js的資料型別

js基礎型別:undefined、null、boolean、string、number

js的引用型別:array、function、object

es6提供新的資料結構:set、map

堆記憶體和棧記憶體

棧記憶體:效率更高,能申請的空間較小
堆記憶體:效率更低,能申請的空間更大

不同型別的儲存位置

基礎型別是在棧記憶體空間

引用型別的引用地址在棧記憶體空間

記憶體地址指向的值在堆記憶體空間

不同型別在傳遞過程中的區別

直接上程式碼

let a = 1
let b 
= a b = 2 console.log(a,b);//1,2 let obj1 = {a:'1'} let obj2 = obj1 obj2.a = '2' console.log(obj1,obj2);//{a:'2'},{a:'2'}


上邊程式碼中b=a是重新開闢一個棧空間存放b變數,所以a和b都是獨立的記憶體空間

而obj1和obj2的賦值只是開闢了一個新的棧記憶體,裡邊放的還是obj1的引用地址,兩個都是指向堆記憶體中的{a:'1'}

所以改變obj2時改變的實際上是堆記憶體中變數,所以obj1也隨著變化了

函式間傳遞

function setTest(){
    let s 
= new Set([1,2,3]) changeSet(s) console.log(s);//Set(2){1,2} let arr = [1,2,3] changeArr(arr) console.log(arr);//[1,5,3] } function changeSet(set){ set.delete(3) } function changeArr(arr){ arr[1] = 5 } setTest()