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()

 

posted @ 2022-03-23 09:08  下一页2013  阅读(71)  评论(0编辑  收藏  举报