JS中分为简单数据类型和复杂数据类型
简单数据类型
简单数据类型又叫基本数据类型或值类型,在存储变量里存储的是值本身,就像string,number,boolean,undefined,null等,它把值直接存放到栈里面,里面直接开辟一个空间来存放值。
简单类型的传参
函数的形参也可以看作是一个变量,当我们把值类型变量传给形参时,其实是把变量在栈空间里面的值复制了一份给形参,那么在方法内部对形参做任何修改,都不会影响到的外部变量
复杂数据类型
复杂数据类型又叫引用类型,在存储变量中存储的仅仅是地址,通过new关键字创建的对象,就像object,Array,Data. 复杂数据类型首先在栈里面存放地址,这个地址指向堆里面的数据
复杂类型的传参
函数的形参也可以看作时一个变量,当我们把引用类型变量传给形参时,其实是把变量在栈空间里保存的地址复制给了形参,形参和实参其实保存的时同一个堆地址,所以操作的是同一个对象
堆和栈的空间分配
栈由操作系统自动分配释放存放函数的参数值、局部变量的值等 堆存储复杂数据类型,一般有程序员分配释放,若程序员不释放,则由垃圾回收机制回收
体会
像这种原理方面的问题只有在基础学会后才能体会出二者的区别,一些简单的项目根本不会涉及到二者的关系,但是不理解是不行的,因为接触到一些大型的复杂的项目,空间的释放与压缩很有可能跟原理挂上钩,这也是面试的时候面试官很喜欢出的一些问题,毕竟做前端程序员,一些基础即使不会在MSN里大部分都可以查到,所以更重要的是掌握根上的原理。