Javascript中的数据类型

引用类型
array , objectfunction

值类型
stringnumberbooleanundefinednull

代码举例
在Javascript中值类型和引用类型在内存中存储的方式不一样。

值类型:存储到栈内存中。

引用类型:存储到堆内存中。(原因类型复杂、大小具有弹性)

demo1

<script>
let x=5;
let y=6;
function exchange(a,b){
    let c=a;
    a=b;
    b=c;
}
exchange(x,y);
console.log(x+" "+y);
//结果5 6
</script>

原因:值类型是复制过去的、而当函数的生命周期过了之后、函数作用销毁了,外面的值没有改变

函数执行之前

//栈内存
    ST001:X,5
    ST002:y,6
    ST003:

进入函数执行中(a,b)是形参

//栈内存
    ST001:X,5
    ST002:y,6
    ST003:a,6
    ST004:b,5
    ST005:c,5
    ST006:

执行结束、变量销毁

//栈内存
    ST001:X,5
    ST002:y,6
    ST003:
    ST004:
    ST005:
    ST006:

完毕

demo2

<script>
let x=[5];
let y=[6];
function exchange(a,b){
    let c=a[0];
    a[0]=b[0];
    b[0]=c;
}
exchange(x,y);
console.log(x+" "+y);
//结果6 5
</script>
//栈内存
    ST001:X,HP001
    ST002:y,HP002
    ST003:
    ST004:

// 堆内存
    HP001:[5],(1)//引用计数(1)一次
    HP002:[6],(1)
    HP003:
    HP004:

函数执行中

//栈内存
    ST001:X,HP001
    ST002:y,HP002
    ST003:a,HP001
    ST004:b,HP002
    ST005:c,5
    ST006:
// 堆内存
    HP001:[6],(2)
    HP002:[5],(2)
    HP003:
    HP004:

函数结束

//栈内存
    ST001:X,HP001
    ST002:y,HP002
    ST003:
    ST004:

// 堆内存
    HP001:[6],(1)
    HP002:[5],(1)
    HP003:
    HP004:
Last modification:January 30, 2020
如果觉得我的文章对你有用,请随意赞赏