JS代码执行过程分为以下两个步骤:
1.预处理过程
2.代码执行
预处理过程主要是跳过执行语句,先按顺序处理声明语句。即使声明是在调用的下方进行的,仍然先声明再调用(执行),这个现象叫做“提升”。
预处理过程完成后为执行代码阶段,按顺序执行代码。
以下面这段代码为例:
var a = 1; //声明a为全局变量
function func(){
console.log(a); //打印a的值
var a = 2; //a为局部变量
console.log(a);
}
func();
以上这段代码第一次打印结果为undefined,第二次打印结果为2。
以上代码在处理过程中,首先会定义变量a和声明函数声明函数func()。对于变量a,只定义不赋值,则此时a的默认值为undefined。预处理完之后执行代码,第一次打印出a的值是undefined,虽然在函数中代码执行前有执行语句a=1,但要注意的是这个a是全局变量,而函数内部定义了局部变量a,此时函数内a的值仍是undefined。第二次打印出a的值为2,因为在第二次打印前执行了a=2,完成了对局部变量a的赋值。
在预处理阶段,对于函数声明,有一种情况是重复函数的声明。这种情况函数的内容是最后一次声明函数的内容。
以下面这段代码为例:
function Hello() {
alert("Hello");
}
Hello();
function Hello() {
alert("Hello World");
}
Hello();
以上代码,输出两次结果都为:Hello World 。
执行过程如下:
function Hello() {
alert("Hello");
}
function Hello() {
alert("Hello World");
}
Hello();
Hello();