概念一:执行上下文;
概念二:变量对象;
概念三 ;内存空间的概念。
执行上下文,就是当前代码的运行环境。JS里的运行环境包括三种,第一种是全局运行环境,第二种是函数运行环境,第三种eval。一个JS程序中,会产生多个执行上下文。
在JS中,我们可以粗浅低理解,所有的数据都放在堆内存中,但是执行上下文运行时,却是基于栈进行处理。程序运行时,栈底永远是全局上下文。然后依次是执行过的函数上下文。
执行上下文的生命周期有两个阶段,第一个是创建阶段,这时候会创建一个变量对象,确定this的指向。第二个是代码开始执行的阶段。
变量对象创建的时候,会创建arguments对象。然后检查函数声明,在变量对象上以函数名创建一个属性,属性值指向对函数内存地址的引用。在检查变量的声明,再在变量对象上以变量名创建一个属性,属性值则为undefined。
而没有进入代码执行的阶段,变量对象上的属性都是不能访问的,代码执行之后,变量对象会变成活动对象。
所谓的变量提升,实际上就是这些。
(而变量对象和活动对象是一个对象,只不过处于执行上下文生命周期的不同阶段)