预编译
Js运行三部剧
- 语法分析 → 预编译 → 解释执行
预编译前奏
imply global暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就为全局对象(就是window)所有。- 一切声明的全局变量,全是
window的属性 window就是全局的域
预编译过程
-
预编译发生在函数执行的前一刻
-
(函数)预编译的四部曲:
- 创建
AO对象Activation Object(执行期上下文,作用是理解的作用域,函数产生的执行空间库) - 找形参和变量声明,将变量和形参名作为
AO属性名,值为undefined,相当于
AO{ a : undefined, b : undefined }- 将实参值和形参统一(把实参值传到形参里)
- 在函数体里面找函数声明,值赋予函数体
- 创建
一旦有重名的,一但有a变量又有a函数【如 function a (){},又在第一条访问的是a,一定是函数
全局的预编译三部曲:
- 生成了一个
GO的对象Global Object(window就是GO) - 找形参和变量声明,将变量和形参名作为
GO属性名,值为undefined - 在函数体里面找函数声明,值赋予函数体
任何全局变量都是 window 上的属性
没有声明就是赋值了,归 window 所有,就是在 GO里面预编译
先生成 GO 还是 AO?
想执行全局,先生成 GO,在执行 test 的前一刻生成 AO
在几层嵌套关系,近的优先,从近的到远的,有 AO就看 AO,AO 没有才看 GO
AO上面有就用 AO的,没有就看 GO 的
本文来自博客园,作者:懒惰ing,转载请注明原文链接:https://www.cnblogs.com/landuo629/p/12561923.html

浙公网安备 33010602011771号