js系列二:内存空间

也许很多人像我一样,觉得JS有垃圾回收机制,内存就可以不管了,以至于在全局作用域下定义了很多变量,自以为JS会自动回收,直到最近,看了阮一峰老师,关于javascript内存泄漏的文章时,才发现自己写的代码,存在很严重的内存泄漏问题,再者,因为忽略对内存的学习,导致后面很多进阶概念很模糊,比如深复制与浅复制的区别,比如闭包、作用域链等等。

基础数据类型与变量对象
最新的ECMAScript标准有7中基本数据类型,其中包括六种基础数据类型和一种引用数据类型(Object)
js系列二:内存空间_第1张图片
因为Symbol存在大量的兼容性问题,应用需要babel编译,所以在现实引用中不提倡实践应用。
我们接下来看一个例子

function fn(){
  var a1 = 10;
  var a2 = "hello";
  var a3 = null;
}
fn();

js系列二:内存空间_第2张图片
我们可以看出,当程序执行 fn() 的时候,函数创建三个变量a1,a2,a3,一开始的初始值都为undefined,当执行到 a1=10,a2=“hello”,a3=null,此时的值才变为赋值。执行完函数没有返回值的时候,函数默认返回undefined。

正宗的解释如下
现在我们思考当函数运行的时候,a1,a2,a3都保存在什么地方?

函数运行的时候回创建一个执行环境,这个执行环境被称为执行上下文。在执行上下文

你可能感兴趣的:(内存空间,javascript入门到进阶,js系列二:内存空间)