预解析
预解析(提前解析,变量提升)
- 提前解析var声明的变量
只会预解析变量名(在代码执行之前告诉浏览器,这个变量已经存在,只不过还没有赋值) - 提前解析 声明式定义的函数
声明式定义函数会预解析这个变量,并且给变量复制一个函数地址
当出现变量声明和函数同名的时候,只会对函数声明进行提升,变量会被忽略。
👇
当声明式定义的函数 的函数名 和 var定义变量名冲突
会预解析声明式定义的函数
预解析的过程:
【1】声明式定义的函数 fun = 函数地址
代码的执行:
【1】fun() 根据fun名字找到函数地址 去执行函数中的代码
【2】fun() 根据fun名字找到函数地址 去执行函数中的代码
【3】fun = 10;
【4】fun() 报错,因为fun=10的时候已经给fun赋值为10 ,fun就不在是一个函数
console.log(num);
var num = 10;//undefined
var num;
console.log(num);
num = 10;//undefined
fun();
function fun(){
console.log(1);
}//1
fun();
var fun = function(){
console.log(2);
}//报错 fun is not a function
var fun;//undefined
fun();
fun = function(){
console.log(2);
}//报错 fun is not a function
var num = 1;
function num () {
alert( num );
}
num();
//num is not a function