1.3 KiB
1.3 KiB
预编译
预编译类型
- 全局预编译 (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(){} }