0. 目标
能够知道解析器运行JS分为哪两步
能够说出变量提升的步骤和运行过程
能够说出函数提升的步骤和运行过程
1. 预解析
JS解析器运行JS分为两步: 预解析 和 代码执行 预解析: JS解析器会把JS里面所有的 var 和 function 提升到当前作用域的最前面
代码执行: 按照代码顺序从上往下执行
预解析分为:变量预解析(变量提升)和 函数预解析(函数提升)
变量预解析:把所有的变量声明提升到当前作用域最前面,只提升声明,不提升赋值
函数预解析:把所有的函数声明提升到当前作用域最前面,只提升声明,不调用函数
函数表达式的函数调用必须写在函数声明后面
2. 预解析案例
相当于执行:
var num;
function fun(){
var num;
console.log(num);
num =20;
} num = 10;
fun();
num 为 Undefined
相当于执行:
var num;
function fn(){
var num;
console.log(num);
num = 20;
console.log(num);
}
num = 10;
fn();
输出结果为: Undefined , 20
var a = b = c = 10; 相当于 var a = 10; b = 10; c = 10; b 和 c直接赋值,当全局变量看