概述
JS是一门弱类型语言
弱类型语言:只有赋值之后才能确定变量的类型
JS中分为两种类型
基本类型(简单类型,值类型):string number bool undeined null
复杂类型(引用类型):object function array
说明
栈(stack)中主要存放一些基本类型的变量和对象的引用其优势是存取速度比堆要快,但缺点是存在栈中的数据大小与生存期必须是确定的,缺乏灵活性,
堆(heap 多)用于复杂数据类型(引用类型)分配空间,例如数组对象、object对象;它是运行时动态分配内存的,因此存取速度较慢。
栈和堆的图例
基本类型存储
定义变量进行初始化就会开辟空间
对于基本类型,会在栈空间中开辟空间,存储值本身
在JS中,参数赋值,就是将实参在栈空间中存储的内容复制一份进行赋值 -- 副本赋值
起初定义一个变量,存储基本类型(以下简述a);当再次定义一个变量(定义变量就会在栈空间中开辟空间),并在a处复制一份内容(以下简述b),b复制到的是a的值本身,当你对b进行重新赋值时,并不会对a造成影响
复杂类型存储
定义变量进行初始化就会开辟空间
对于引用类型,会在栈空间中开辟空间,存储引用地址,值本身存储在堆空间
在JS中,参数赋值,就是将实参在栈空间中存储的内容复制一份进行赋值 -- 副本赋值
起初定义一个变量,存储复杂类型(以下简述a);当再次定义一个变量(定义变量就会在栈空间中开辟空间),并在a处复制一份内容(以下简述b),b复制到的是a的引用地址,此时a与b指向的都是堆空间中存储的同一份内容,当对b进行重新赋值时,b会找到堆空间中的内容,进行修改,从而会导致a的值也会发生变化