预编译
什么是预编译
定义:
预编译又称为预处理 , 在函数执行之前产生预编译。
预编译的影响:
1 声明的函数会被提升:函数有两种创建方式:
一种是声明式:
function fn(){}
一种是赋值式:
var fn = function(){}
- 只有声明式函数会被提升,赋值式函数不会被提升
2 变量的声明提升:
- 首先var a = 123;这个叫做变量的声明和赋值等价于:var a; a = 123;,系统首先会把变量声明var a;提升到最前面.
- 这里要注意的是在js中函数的身份是非常高的,也就是说当声明式函数的函数名和一个变量名一样的时候,在预解析时这个名字是属于函数名的,比如:
console.log(a);//打印的结果是ƒ a() {}
var a;
function a(){}
举个栗子
//在代码执行之前,预编译发生,此时系统知道有一个叫 a的变量,
//又知道了一个加a的函数,但是因为函数的地位比较高,
//所以打印a结果就是函数a。
console.log(a);//f a(){}
var a = 10; //当函数执行到这一步时,其实只执行了a=10
//这个代码,因为预编译的时候var a已经被执行了,所以此时a = 10
function a(){
}
console.log(a);//10