数据类型内存分配

110 阅读1分钟

在js中数据分为,简单数据类型(原始值)和复杂数据类型(引用类型),对于他们在内存中是如何分配的呢? 内存被分为了栈和堆,简单数据类型里面装的是值,被放在栈中存储;复杂数据类型里面装的是一个地址,这个地址(下图中的举例地址是假设的为这个,具体地址是由系统自动分配的)以十六进制的方式存储在栈中,然后这个地址指向堆中所装的这个对象的具体值。 image.png

简单数据类型传参:

    var a = 1;
    function fun1 (b) {
        b++;
        console.log(b); // 2
    }
    fun1(a);
    console.log(a); // 1
    

最初内存分配情况: image.png

当执行到函数fun1()中的语句:b++后的内存分配:

image.png

复杂数据类型传参:

    function Person (name) {
        this.name = name;
    }
    var man = new Person('刘德华');
    console.log(man.name); // 刘德华
    function fun2 (p) {
        console.log(p.name);  // 刘德华
        p.name = '张学友';
        console.log(p.name);  // 张学友
    }
    fun2(man);
    console.log(man.name);  // 张学友
    

内存最初分配情况:

image.png

当执行到函数fun2()中的语句:p.name = '张学友'后的内存分配:

image.png