70 lines
1.3 KiB
Markdown
70 lines
1.3 KiB
Markdown
# 预编译
|
||
### 预编译类型
|
||
* 全局预编译 (GO)
|
||
* 局部预编译 (AO)
|
||
### 预编译发生的时间点
|
||
* 全局预编译 发生在 整个页面加载完成
|
||
* 局部预编译 发生在 函数执行的前一刻
|
||
|
||
### 预编译过程
|
||
* GO:
|
||
1.先找变量和函数声明 赋值为undefined
|
||
2.扫描执行后 变量赋值
|
||
3.寻找函数声明 并把函数体赋给函数
|
||
4.执行
|
||
* AO
|
||
1.先找变量和形参
|
||
2.实参和形参相统一
|
||
3.寻找函数声明 并把函数体赋给函数
|
||
4.执行
|
||
函数表达式会在实参和形参相统一的步骤中完成赋值
|
||
|
||
```
|
||
function a (val) {
|
||
var name = val
|
||
// c=0 这里的c是全局变量 window.c 能访问到
|
||
function b () {}
|
||
var d=function(){} //d是一个函数表达式
|
||
}
|
||
var str = 'Hello World'
|
||
a(1)
|
||
```
|
||
|
||
分析:
|
||
GO:
|
||
1.找变量和函数声明 (a,str) 并赋值为Undefined
|
||
Go{
|
||
a:undefined,
|
||
str:undefined
|
||
}
|
||
2.执行的过程中 变量赋值
|
||
GO{
|
||
a:undefined
|
||
str:"hello world"
|
||
}
|
||
3.找函数声明
|
||
GO{
|
||
a:function(){}
|
||
str:"hello world"
|
||
}
|
||
|
||
Ao:
|
||
1.先找变量和形参
|
||
AO{
|
||
val:undefined,
|
||
name:undefined,
|
||
d:undefined
|
||
}
|
||
2.实参和形参相统一
|
||
AO{
|
||
val:1,
|
||
name:1,
|
||
d:function(){}
|
||
}
|
||
3.寻找函数声明 并把函数体赋给函数
|
||
AO{
|
||
val:1,
|
||
name:1,
|
||
b:function(){},
|
||
d:function(){}
|
||
} |