【预解析定义】浏览器在执行页面代码之前,会先把页面代码都扫描一遍,并把 声明式的函数和变量 都提到所在作用域的最前端
<涉及变量提升与函数提升两个概念>
(1)<变量预解析—变量提升>
变量提升,分为全局作用域变量提升和局部变量提升
<1>全局变量提升,在预解析阶段,浏览器的JS引擎,会将所有 变量 的声明部分,都提到所在作用域(整个页面代码)的 最前端

y1.png
<2>局部变量提升:在函数内部 ,局部变量在预解析时,会把 变量 的声明部分 ,提升到当前函数内部的最前端, 然后再执行

y2.png
(2)<函数预解析—函数提升>
在浏览器预解析阶段,浏览器的JS引擎会将所有 声明式函数 都提到所在作用域的 最前端, 之后再进行代码由上而下执行
只有声明式函数才有函数提升,匿名方式和对象方式创建的函数,在预解析时不会做函数提升

y3.png