1、堆——存储引用数据类型;
2、栈——存储基本数据类型和引用数据类型的地址;
3、调用栈
每次函数调用会将该函数执行上下文进行入栈操作;多个函数之间的调用,通过函数调用栈可以清晰的看出其调用顺序,环境内变量的值;方便开发和定位
4、解释型、编译型
个人理解:
解释型——基于不同系统(Mac,windows,linux等)上方均存在一个解释器,解释性语言可直接运行在一个解释器中,只要系统上存在解释器,解释性语言即可实现跨平台,无需编译即刻运行
编译型——代码首先需编译成二进制文件,该二进制文件运行在某一系统上,如CPU指令发生变化,需要重新修改源码,重新编译;编译型语言默认不会在运行阶段出现语法错误,因为编译阶段已经去除语法错误
5、静态类型、动态类型
静态类型–一个变量声明时它的类型就是明确的。声明过后,它的类型就不允许再修改。
动态类型–运行阶段才能够明确变量的类型,而且变量的类型随时可以改变。其实,动态类型语言中的变量没有类型,变量当中存放的值是有类型的。JavaScript就是一门动态类型的语言。
6、弱引用、强引用
在说这个之前,我们得首先了解js的垃圾回收机制
1)引用计数
2)标记清除
强引用——变量引用到了对象
弱引用——对象作为weakMap,weakSet,weakRef的键值引用,可实现弱引用
强引用的对象不会被垃圾回收机制回收,但是弱引用对象是会被回收的。
强引用可能导致内存无法释放,造成内存泄漏;而弱引用不存在这个问题。