预编译
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?