提升、执行环境、执行环境对象

理解这3个的前提,需先明白 JavaScript 引擎 在进入作用域时,分两步对代码进行处理1、初始化变量,2、执行代码(赋值)。例子:

提升、执行环境、执行环境对象

这里,a 被提升了,然后执行 say 的时候才赋值 'hello' 的。

上面例子涉及下面几个点:

提升:变量被声明时,会被提升到它所在函数的顶部,并被初始化为 undefined ,而赋值还在原来的地方。

隐含的部分,深层次的内容:

执行环境:运行中的函数的意思,只有在函数被调用的时候才会产生由函数执行时发生的所有事物组成,这和函数声明是分离的,因为函数声明描述的是函数执行时会发生什么事情,而执行环境是指函数的执行。

执行环境对象:是对执行环境的 ECMA 标准实现,用来保存执行环境部分的变量和函数,是一种对象(如:{ xxx : 'xxx'  }),不过不能在JS中直接被访问。(每次在访问变量,就是等于在访问执行环境对象的属性)

例子:

第一轮:变量初始化

提升、执行环境、执行环境对象

提升、执行环境、执行环境对象

第二轮:执行代码

提升、执行环境、执行环境对象

提升、执行环境、执行环境对象

一句话理解:

执行环境,如房子,函数调用就如同造房子,而执行环境对象,则如房子的管家,支配所有房子的物资。:)






转载于:https://my.oschina.net/Karon/blog/600225