天天看点

Javascript,堆和栈的理解

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>堆和栈</title>
</head>

<body>

    <script>
        // 栈内存
        // a:'fwfwfw'
        // b:123
        // c:00      栈内存由下至上查找   

        var a = 'fwfwfw'
        // 开辟1单元a 存储 'fwfwwfw' 
        var b = 123
        // 开辟2单元b 存储 123
        a = b;
        // 开辟3单元a 存储 123
        b = 43
        // 开辟4单元b 存储 43 
        var c = a
        // 开辟5单元c 存储 123 
        var c;
        // 开辟6单元c 存储 123
        var d;
        // 开辟7单元d 存储            |从下至上找单元d未找到,变量已声明,开辟7单元d空间, 未存储数据:undefined  
        var d = 1232;
        // 开辟8单元d 存储 1232       |8单元d内的 1232 并不会消失
        var d;
        // 开辟9单元d 存储 1232       |从下至上找到最近单元d,在8单元找到数据 空间内存储1232 找到并进行clone存储在9单元d;
        var o = d;
        // 开辟10单元o 存储 1232      |从下至上未找到单元o,开辟10单元o,找到单元d内空间数据1232 clone到10单元o空间内存储1232,
        d = '666';
        // 开辟11单元d 存储 '666'     
        var o;
        // 开辟12单元o 存储 '1232'    |从下至上找到10单元o,clone数据1232到12单元o

        console.log(a, b, c, d, o)  //a从下至上找最近的 
        // 取值会从下至上找栈内存中最近的一个存储单元 遇到同名时会拿取同名单元的存储数据;
        // 栈内存存储原始数据,原始数据一旦创建,不可删除,永久存储,只会开辟新单元空间存放数据;
        // 内部的原始数据删除之后可以找回;

        // 堆内存
        var arr = [1, 2]
        // 开辟新1单元arr 堆内存  存放1,2   在栈内存中开辟13单元arr 存储 1单元堆内存指向   
        var arr2 = arr;
        // 未开辟新单元   堆内存    在栈内存中开辟14单元arr2 存储 1单元堆内存指向     
        arr = [3]
        // 开辟新2单元arr 堆内存  存放3  在栈内存中开辟15单元arr 存储 2单元堆内存指向  
        var arr;
        // 未开辟新单元   堆内存    在栈内存中开辟16单元arr 存储 2单元堆内存指向  
        arr2 = arr;
        // 未开辟新单元   堆内存    在栈内存中开辟17单元arr2 存储 2单元堆内存指向       
        arr[1] = 'nihao'
        // 未开辟新单元   堆内存    在栈内存中开辟18单元arr 存储 2单元堆内存指向      |从下至上找到堆内存2单元arr更改数据为 [3,'nihao']  

        console.log(arr, arr2)

        // 堆内存  用来存储引用类型数据  引用数据的指针路径存在栈内存  
        // 修改引用数据类型时,会通过栈内存的存储路径找到堆内存中的数据进行修改,栈内存中的存储指针路径并不会修该,所以在更改引用数据类型时,其他栈内存有引用的也会更改;
        // !栈内存会不断叠加,原始数据不能删除 ,容易造成栈内存溢出;

    </script>


</body>

</html>