重点--简单类型和复杂类型

\color{rgba(254, 67, 101, .8)}{}

目标:
1.知道简单书库类型的内存分配
2.知道复杂数据类型的内存分配
3.知道简单数据类型如何传参
4.知道复杂数据类型如何传参

\color{rgba(254, 67, 101, .8)}{简单类型与复杂类型}

简单类型又叫基本数据类型或者\color{rgba(254, 67, 101, .8)}{值模型},复杂数据类型又叫\color{rgba(254, 67, 101, .8)}{引用类型}

  • 值类型:简单数据类型/基本数据类型,在存储时变量中存储的是值本身,因此叫值类型
    string , number , boolean , undefined , null
  • 引用类型: 复杂数据类型,在存储时,变量中存储的仅仅是地址(引用),因此叫做引用数据类型,通过new关键字创建的对象(系统对象、自定义对象),如Object、Array、Date等

\color{rgba(254, 67, 101, .8)}{简单数据类型 null比较特殊,返回值是一个空对象}
\color{rgba(254, 67, 101, .8)}{如果有变量要存为对象,暂时没有值,就可以存为null}

    <script>
        var timer = null;
        console.log(typeof timer);
    </script>
image.png

\color{rgba(254, 67, 101, .8)}{简单类型的内存分配}
\color{rgba(254, 67, 101, .8)}{复杂类型的内存分配}

\color{rgba(254, 67, 101, .8)}{堆和栈,JS中没有堆栈的概念}
\color{rgba(254, 67, 101, .8)}{只是借助这个思想学习内存分配}

堆栈空间分配区别:

  • 1.栈(操作系统):由操作系统自动分配释放存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈;

\color{rgba(254, 67, 101, .8)}{简单数据类型存放到栈里面}(存放的是值)

  • 2.堆(操作系统):存储复杂数据类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收

\color{rgba(254, 67, 101, .8)}{复杂数据类型存放到堆里面}(复杂数据类型变量名指向的也是栈,只是栈里存放的是16进制地址,这个16进制地址又指向堆里,堆里存的才是真正的值)

image.png

\color{rgba(254, 67, 101, .8)}{简单类型传参}

函数的形参也可以看作是一个变量,当我们把一个值类型变量作为参数传给函数的形参时,其实就是把变量在栈空间里的值复制了一份给形参,那么在方法内部对形参做任何修改,都不会影响到外部变量

\color{rgba(254, 67, 101, .8)}{复杂类型传参}

函数的形参也可以看作是一个变量,当我们把引用类型变量传给形参时,其实是把变量在栈空间里保存的堆地址赋值给了形参,形参和实参其实保存的是同一个堆地址,所以操作的是同一个对象

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容