js中的記憶體空間
阿新 • • 發佈:2022-03-23
目的:
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()