JS预编译
JS预编译
js运行三部曲
- 语法分析
- 预编译
- 解释执行
** 预编译 **
- 预编译发生在函数执行前的一刻。
- 简单现象:函数声明整体提升, 变量 声明提升(定义赋值不提升)
** 预编译过程(四部曲):**
1.创建AO对象(Activated Object)(执行期上下文)
2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined。
3.将实参值和形参统一。
4.在函数体里面找函数声明,值赋予函数体。
function fn(a){
console.log(a);
var a =123;
console.log(a);
function a(){};
console.log(a);
var b = function(){};
console.log(b);
function d(){};
}
fn(1);
//解析
一、预编译过程:
1.创建AO对象,找形参和变量声明,将变量和形参名作为AO属性名,值设置为undefined。
AO{
a:undefined,
b:undefined,
}
2.形参和实参统一
AO{
a:1,
b:undefined,
}
3.找函数声明,值赋予函数体
AO{
a:function a(){},
b:undefined,
d:function d(){};
}
二、执行过程
1.第一个console.log(a):function a(){},
2.赋值a = 123;
3.第二和第三个console.log(a):123,
4.声明并赋值b后
AO{
a:123,
b:function (){},
d:function d(){};
}
console.log(b):function (){}
//对于全局对象也是与上面函数预编译过程差不多
对于全局创建的是GO对象(global object)
** PS: **
1) imply global:没有声明就直接赋值的变量属于全局对象所有。
a = 12; //window.a = 12
2) 一切声明的全局变量全是window的属性。
window就是全局的域。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南