js关于内存空间以及相关知识点(上)
栈内存存取示意图
栈内存的存取方法就好像一个兵乓球盒子,第5 个球肯定是最后放入的,也是要最先使用的,如果要使用第1个球,那要先将第一个球上面的所有球释放使用掉。栈内存的使用方式是"先进后出,后进的先出"。
堆内存的方式就好像书和书架的关系,只要知道书的名字,就可以自由去书架上寻找相对应的书。
基本数据类型和引用数据类型
js有六种基本数据类型,分别为:String,Number,Boolean,Null,Undefined。基本数据类型是按值来保存的,所以我们可以直接操作保存在变量当中的基础对象的值。
js有三种引用数据类型,分别为:Object,Function,Array.引用类型是按堆内存来保存的,变量保存一个引用数据类型会将值保存到堆内存当中。js不允许直接操作保存在堆内存当中的值,所以我们实际操作的是堆内存的一个引用而已。所以我们操作一个引用类型的值时,是先获取它保存在堆内存当中的引用,然后根据引用去获取堆内存的值。
执行上下文
js当中当遇到一个可执行的代码块时,会进入一个执行上下文,意思就是它的当前的可执行坏境。也就是会创建一个作用域。可执行的代码块有三种情况
1;全局环境 //当执行代码时,最先进入全局环境
2;函数环境 //当一个函数被调用执行时,会进入它的局部函数环境
3;evel;
当代码在执行过程中,遇到以上三种情况时,会进入一个执行上下文,将其放入栈中,当处于栈顶中的执行上下文执行完毕后,会从栈中弹出。以下是例子
上面的例子中,首先入栈的是全局环境,然后执行中碰到了changeColor函数,然后changeColor入栈,
然后执行changgeClolor函数的时候碰到了swap函数,swap函数入栈。当swap函数执行完毕后,出栈,然后changeColor函数出栈。当浏览器关闭之后,全局环境出栈。
注意,函数当遇到return时,会直接将当前上下文弹出栈。不会继续执行
执行上下文的几个关键点
1,全局上下文只有一个,
2;单线程
3,函数的执行上下文是没有个数限制的
4,当一个函数执行时,会创建一个执行上下文,即使时它自己本身的函数被调用。