当前位置:网站首页>JS 预编译
JS 预编译
2022-08-03 05:43:00 【无知小九】
0. 预编译的理解
JavaScript 是解释性语言, 即编译一行, 执行一行. 但在编译前存在预编译过程.
预编译分为两种, 全局的预编译(代码执行前)和函数的预编译(函数执行前).
1. 函数预编译
1.生成 Activation Object 对象
2.寻找形参和变量声明, 将其作为 AO 属性名, 值为 undefined
3.形参值为实参
4.寻找函数声明, 函数名作为 AO 属性名, 值为函数体
例如
<script>
function game(a) {
console.log(a);
var a = 123;
console.log(a);
function a(){
};
console.log(a);
var b = function(){
};
console.log(b);
}
game(0);
</script>
结果为
ƒ a(){
}
123
123
ƒ (){
}
过程如下
1.生成 AO, 寻找形参和变量声明, 值为 undefined
AO :{
a: undefined,
b: undefined
}
2.形参值为实参
AO :{
a: 0,
b: undefined
}
3.函数声明, 值为函数体
AO :{
a: function a() {
},
b: undefined,
}
2. 全局预编译
1.生成 Globa Object
2.找变量声明, 如果 window 存在当前属性, 会忽略, 否则变量会作为属性名, 值为 undefined
3.找函数声明, 同 2, 如果 window 没有, 属性为函数名, 值为函数体
例如
<script>
console.log(a);
var a = 1;
console.log(a);
function game(a){
console.log(a);
var a = 123;
console.log(a);
function a() {
};
console.log(a);
console.log(b);
var b = function(){
};
console.log(b);
}
game(0);
</script>
结果
undefined
0
ƒ a() {
}
123
123
undefined
ƒ (){
}
3. 常见考题
例题一
<script>
function test() {
console.log(b);
if (a) {
var b = 100;
}
console.log(b);
c = 234;
console.log(c);
}
var a;
test();
a = 10;
console.log(c);
</script>
解答
undefined
undefined
234
234
例题二
例题三
例题四
例题五
边栏推荐
- MySQL的触发器
- 5 个开源的 Rust Web 开发框架,你选择哪个?
- Multi-Head-Attention principle and code implementation
- Flink对比Spark
- DIFM网络详解及复现
- ClickHouse删除数据之delete问题详解
- Content type ‘applicationx-www-form-urlencoded;charset=UTF-8‘ not supported“【已解决】
- Shell脚本--信号发送与捕捉
- El - tree to set focus on selected highlight highlighting, the selected node deepen background and change the font color, etc
- AlexNet网络详解及复现
猜你喜欢
随机推荐
Charles capture shows
solution ClickHouse 数据插入、更新与删除操作 SQL
关于NOI 2022福建省选及省队组成的公告
PHP 获取服务器信息
postman配置中文
CCF NOI 2022笔试题库
Example of embedding code for continuous features
ES6 - 剩余参数,Array的扩展方法,String的扩展方法
【云原生 · Kubernetes】搭建Harbor仓库
pyspark @udf 循环使用变量问题
信息学奥赛一本通T1448:深搜的剪枝技巧 电路维修
MySQL的on duplicate key update 的使用
pyspark---低频特征处理
SQLServer2019安装(Windows)
Nacos与Eureka的区别
empty() received an invalid combination of arguments - got (tuple, dtype=NoneType, device=NoneType),
Scala 高阶(七):集合内容汇总(上篇)
信息学奥赛一本通T1452:Keyboarding
Nacos下载与安装
Flink对比Spark









