zoukankan      html  css  js  c++  java
  • 前端中关于堆和栈的那些事

    前端中关于堆和栈的那些事

    写在前面:关于堆和栈,概念知道,但是该怎么应用呢,我自己本身是第三遍才更加深刻的明白,第一遍是知道什么是堆和栈,第二遍是在应用时懵逼了,第三遍是刷视频和自己练习时有了醍醐灌顶的感觉。

    • 栈 内存:里面的数据不能长期存在,一般存在运行的函数或者局部变量(基本类型)

    • 堆 内存: 数据可以长期存放,一般存放对象。(引用类型)

      数据类型

      • 基本数据类型:(还是要声明一点,占用内存空间固定,保存在栈中,保存与复制的是值本身)
        1. string:字符串,用于文本
        2. boolean:布尔类型
        3. number:用于表示数值
        4. null :缺少的标识,指示变量未指向任何对象
        5. underfined:任何一个只声明未复制的变量
      • 引用类型:对象,数组,Data,...除了基本数据类型外

      堆和栈的应用

      • 堆:只要时引用类型的数据,复制和赋值的都是一个地址,数据指向的都是一个地址,地址里面的数据变化之后,指向这个地址的数据都会变化
      //判断arr1  和 arr2是否一致
       let arr1 = [1,2,3,4]
       let arr2 = arr1
       arr2[2]=8
       cinsole.log(arr1,arr2)
       // arr1,arr2都为[1,2,8,4]
      
      • 栈:基本类型的数据都是存在栈中,保存和复制的都是自己本身

        	let a = 1
        	let b = a
        	b =2
        	console.log(a,b)
        	a为1,b为2																												
        

        练习时出错的点

         let arr1 = [1,2,3,4]
         let arr2 = arr1
         arr2[2]=[1,3,3,4]
         cinsole.log(arr1,arr2)
         arr1 = [1,2,3,4];
         arr2[2]=[1,3,3,4]
        

        问题:按理说引用数据类型指针指向的是一个地址,会什么有两个不一样的答案呢

        分析发现:arr1指向的地址和arr2是不同的,所以是不同的数据,arr2 自己又重新引用了一个地址,一个数组,一个对象就是一个堆,arr2=[]就是重新得到了一个新的内存地址

  • 相关阅读:
    算法分析(3)——冒泡排序真的慢吗?
    算法分析(2)——大O和大Θ
    算法分析(1)——数据的影响和函数的增长
    递归的逻辑(5)——米诺斯的迷宫
    递归的逻辑(4)——递归与分形
    李洪强和你一起学习前端之(9)规避脱标,CSS可见性,滑动门案例
    iOS应用管理(优化)
    iOS开发-应用管理
    iOS开发-Tom猫
    iOS 10.3.3 更新背后的故事
  • 原文地址:https://www.cnblogs.com/wszzj/p/14103423.html
Copyright © 2011-2022 走看看