// js引擎运行js分为两步:预解析 代码执行
// 预解析:js引擎会把js里面所有的var还有function 提升到当前作用域的最前面
// 代码执行:按照代码书写的顺序从上往下执行
// 2、预解析分为 变量预解析(变量提升)和函数预解析(函数提升)
// 变量提升:就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作
// 函数提升:就是把所有的函数声明提升到当前作用域的最前面 但是不调用函数
console.log(num); // undefined
var num = 10
// 执行顺序:
// var num
// console.log(num);
// num = 10
// js预解析把声明的变量提升了;但赋值不提升
fun()
var fun = function() {
console.log(22);
}
// 执行顺序
// var fun
// fun() // Uncaught TypeError: fun is not a function 上面声明完 还没赋值直接调用
// fun = function() {
// console.log(22);
// }
预解析案列
var num = 10
fun()
function fun() {
console.log(num); //undefined
var num = 20
}
// 执行顺序
// 先把var变量和函数提升到当前作用域前面
var num;
function fun() {
//var num;
console.log(num); //undefined
var num = 20
//num=20
}
num = 10
fun()