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(){}
|
|||
|
}
|