预处理:创建一个词法环境(LexicalEnvironment,在后面简写为LE),扫描JS中的用声明的方式声明的函数,用var定义的变量并将它们加到预处理阶段的词法环境中去。
// 全局环境
var a = 1;
var b;
c = 3; // 不会预处理
function d() {}
var e = function () {}
LE{ //此时的LE相当于window
a:undefined
b:undefined
没有c
d:对函数的一个引用
e:undefined
}
函数中的解析和执行过程和全局中的解析和执行过程区别不是很大,函数中有个arguments需要注意一下
function f(a,b){
alert(a);
alert(b);
var b = 100;
function a(){}
}
f(1,2);
LE {
b:2
a:指向函数的引用
arguments:2
}