## JS预编译
> JS执行前会进行预编译
- 全局预编译GO(Global Object)
- 函数预编译AO (Activation Object)
```
var a
function fun() {
}
function abc() {
}
function a() {
}
console.log(a);
var a = 100;
console.log(a);
```
- 会生成一个对象(GO),这个对象封装的就是作用域,称为GO(global object)。当全部挂载完成之后,然后代码在去逐行执行
```
GO = {}
```
- 分析变量声明(var)——变量作为GO对象的属性名,值为undefined
```
GO = {
a: undefined
}
```
- 分析函数声明(function)——函数名作为GO对象的属性名,值为函数体(如果遇到同名,直接覆盖)
```
GO = {
a: undefined,
fun: function fun(){},
abc: function abc(){}
}
```
- 当走到某一行的时候;a产生了一次赋值;此时GO对象变成了:
```
GO = {
a: 100,
fun: function fun(){}
abc: function abc(){}
}
```
- 逐行执行(看着GO对象里面的执行)
*****
> **AO:是函数执行前的一瞬间,生成一个AO对象(在函数执行前的一瞬间会生成自己的AO,如果函数执行2次,生成了两次AO,这两次的AO是没有任何关联)**
```
var num = 100
function fun(num, age) {
console.info(age)
var age = 15
console.info(age)
console.log(num)
function ohter() {}
}
fun(5, 12)
```
- 执行前的一瞬间,会生成一个AO(action object)对象
```
AO = {}
```
- 将函数内的形参和变量声明存储到AO对象中,值为undefined
```
AO = {
num: undefined,
age: undefined
}
```
- 将实参和形参统一,形参作为AO对象的属性名,实参作为AO对象的属性值
```
AO = {
num: 100,
age: 12
}
```
- 分析函数声明,函数名作为AO对象的属性名,值为函数体,如果遇到同名的,直接覆盖
```
AO = {
num: 100,
age: 12,
ohter: function() {}
}
```
- 整体执行过程
```
// step - 1
GO = {}
// step - 2
GO = {
num: undefined
}
// step - 3
GO = {
num: undefined,
fun: function((num, age) {
console.info(age)
var age = 12
console.log(num)
function ohter() {}
}
}
// 逐行执行(赋值) step - 4
GO = {
num: 100,
fun: function((num, age) {
console.info(age)
var age = 12
console.log(num)
function ohter() {}
}
}
// 执行函数 step - 5
AO = {}
// step - 6
AO = {
num: undefined,
age: undefined
}
// step - 7
AO = {
num: 100,
age: 12
}
// step - 8
AO = {
num: 100,
age: 12,
ohter: function() {}
}
// 执行console.info(age) step - 9
12
// 执行赋值 step - 10
AO = {
num: 100,
age: 15,
ohter: function() {}
}
// 执行console.info(age) step - 11
15
// 执行console.info(num) step - 12
5
```
- 版本控制之Git简介
- Git工作流程
- Git工作区、暂存区、版本库
- Git 指令汇总
- Git 忽略文件规则 .gitignore
- pull request
- HTTP简介
- HTTP - Keep-Alive
- HTTP缓存
- XMLHttpRequest
- Fetch
- 跨域
- HTTP 消息头
- TCP/IP
- TCP首部
- IP首部
- IP 协议
- TCP/IP漫画
- 前端开发规范
- 前端开发规范整理
- 前端未来规划
- HTML思维导图
- CSS思维导图
- 布局
- position,float,display的关系和优先级
- line-height、height、font-size
- 移动端适配
- JS 对象
- JS 原型模式 - 创建对象
- JS 预编译
- 探索JS引擎
- ES