JavaScript预解析

257 阅读1分钟

0. 目标

  • 能够知道解析器运行JS分为哪两步

  • 能够说出变量提升的步骤和运行过程

  • 能够说出函数提升的步骤和运行过程

1. 预解析

1651211252(1).png

JS解析器运行JS分为两步: 预解析 和 代码执行 预解析: JS解析器会把JS里面所有的 var 和 function 提升到当前作用域的最前面

代码执行: 按照代码顺序从上往下执行

预解析分为:变量预解析(变量提升)和 函数预解析(函数提升)

  • 变量预解析:把所有的变量声明提升到当前作用域最前面,只提升声明,不提升赋值

  • 函数预解析:把所有的函数声明提升到当前作用域最前面,只提升声明,不调用函数

函数表达式的函数调用必须写在函数声明后面

2. 预解析案例

1651211934(1).png 相当于执行:

var num;

function fun(){

var num;

console.log(num);

num =20;

} num = 10;

fun();

num 为 Undefined

1651212188(1).png 相当于执行:

var num;

function fn(){

var num;
console.log(num);
num = 20;
console.log(num);

}

num = 10;

fn();

输出结果为: Undefined , 20

1651212748(1).png

var a = b = c = 10; 相当于 var a = 10; b = 10; c = 10; b 和 c直接赋值,当全局变量看