- 语法分析阶段:script标签加载开始,分析整个标签内的语法错误,无错误即进入编辑阶段。
- 预编译阶段(变量声明提升就在此阶段,变量声明是在函数声明以及形参):创建执行上下文,并放入执行栈中。此时,当前环境会进行一定的函数提升和变量提升。环境中没有新的函数声明即进入解释执行阶段。
- 解释执行阶段
变量声明提升
- 变量声明提升是在函数声明之后。
// 变量声明提升在函数声明后面
a(); // 2
var a = 1;
var a = function () {
console.log(1);
}
function a() {
console.log(2);
}
- 变量声明提升是在形参声明之后。如果声明的变量名称与形参参数名一致,不会干扰形参的参数名。
var a = 1;
function foo(a) {
console.log(a); // 1 , 并没有受var a = 2 声明提升的影响变为undefined
var a = 2;
console.log(a); // 2
}
foo(a);