//1 我们的JS引擎运行JS代码分为两步:预解析 代码执行;
//(1) 预解析:JS引擎会把JS里面所有的var function 提升到当前作用域的最前面;
//(2) 代码执行;按照代码书写的顺序从上往下执行;
//2 预解析分为两种: 变量预解析(变量提升) 函数预解析(函数提升);
//(1) 变量提升:就是把所有的变量声明提升到当前作用域的最前面 不提升赋值操作;
//(2) 函数提升:就是把所有的函数声明提升到当前作用域的最前面 不提升调用函数;
//1 结果是几
//console.log(num); //报错
//2 结果是几
var num = 10;
console.log(num); //10
//3 结果是几
console.log(num1);
var num1 = 10; //undefined
// //这里就是变量提升--提升变量声明为最前面,不提升赋值 所以是undefined
//相当于执行以下
// var num1;
// console.log(num1);
// num1 = 10;
//4 结果是几 使用函数表达式声明函数 切记fun是个变量名
// fun(); //报错
var fun = function() {
console.log(222);
}
//fun(); //222
// //上面报错也是因为变量提升 提升变量声明为最前面,不提升赋值
//相当以下操作
// var fun;
// fun();
// fun = function() {
// console.log(222);
// }
//5 结果是几 使用函数关键字声明函数
fn(); //111
function fn() {
console.log(111);
}
//fn(); //111
//这里不管在前面条用还是后面条用都能运行是因为函数的提升--提升函数声明为最前面,不提升函数调用
//当在前面调用相当于以下操作
// function fn() {
// console.log(111);
// }
// fn();