// 预解析:JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。
// JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程
/预解析过程:1. 把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
2. 把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
3.先提升var,在提升function/
var num = 10;
fun();
function fun() {
console.log(num);//undefined
var num = 20;
}
// 变量的解析
// 把变量名称提前声明
// 变量提升,定义变量的时候,变量的声明会被提升到作用域的最上面,变量的赋值不会提升。
console.log(str1)//undefined
var str1=0;
console.log(str1)//0
var num = 22;
fun2();
function fun2() {
console.log(num);//22
//var num = 20;
}
// 函数提升 JavaScript解析器首先会把当前作用域的函数声明提前到整个作用域的最前面
// 函数和变量的预解析 名称相同 ,函数优先解析 所以显示函数 而不会显示变量
console.log(str);//ƒ str(){console.log('hhh');}
var str=1;
function str(){
console.log('hhh');
}