什么是预解析:
- JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程
预解析过程:
- 把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
- 把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
- 先提升var,再提升function
下面是代码演示:
console.log(num);
var num=10;
- 我们发现执行过后结果为undefinde;,说明把变量声明提前了,相当于:
var num;
console.log(num);
num=10;
案例
案例一:
f1();
var num=20;
function f1(){
console.log(num);
}
- 我们发现结果为undefined,因为函数的声明提升到作用域的前面,函数同时也会到调用的前面,即下面的代码:
var num;
function f1(){
console.log(num);
}
f1();
num=20;
案例二:
var a;
function a(){
console.log('aaaaa');
}
console.log(a);
a=1;
console.log(a);
下面是输出结果:
- 我们发现前面是函数的代码,这是因为声明的是a,刚好函数名也是a,故我们输出的是函数代码,同时最后一个console.log输出的结果为1.
案例三
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
var a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}
这时我们发现结果为:
- 这是因为提前声明的a为局部变量,同时函数声明提前,而后面bc为隐式全局变量,从而bc,都能在函数外部输出,但是a却不能输出
代码转化应为:
以上就是我对预解析的一些基本介绍,希望对你们有帮助!