学习笔记,仅供参考,有错必纠
 参考自:pink老师教案
文章目录
预解析
预解析概述
js引擎运行js代码分为两步:
- 预解析:js引擎会把js 里面所有的
var还有function提升到当前作用域的最前面 - 代码执行:按照代码书写的顺序从上往下执行
 
预解析又分为:
- 变量预解析(变量提升):就是把所有的变量声明提升到当前作用域的最前面,但不提升赋值操作
 - 函数预解析(函数提升):就是把所有的函数声明提升到当前作用域的最前面,但不调用函数
 
预解析案例
案例1
 var num = 10;
 fun();
 function fun() {
     console.log(num);
     var num = 20;
 }
 
相当于执行了以下操作:
 var num;
 function fun() {
     var num;
     console.log(num);
     num = 20;
 }
 num = 10;
 fun();
 
案例2
 var num = 10;
 function fn() {
     console.log(num);
     var num = 20;
     console.log(num);
 }
 fn();
 
相当于以下代码:
 var num;
 function fn() {
     var num;
     console.log(num);
     num = 20;
     console.log(num);
 }
 num = 10;
 fn();
 
案例3
 var a = 18;
 f1();
 function f1() {
     var b = 9;
     console.log(a);
     console.log(b);
     var a = '123';
 }
 
相当于以下代码:
 var a;
 function f1() {
     var b;
     var a;
     b = 9;
     console.log(a);
     console.log(b);
     a = '123';
 }
 a = 18;
 f1();
 
案例4
 f1();
 console.log(c);
 console.log(b);
 console.log(a);
 function f1() {
     var a = b = c = 9;
     console.log(a);
     console.log(b);
     console.log(c);
 }
 
相当于以下代码:
 function f1() {
     var a;
     a = b = c = 9;
     // 相当于 var  a  = 9; b = 9; c = 9; b 和 c 直接赋值 没有var 声明 当 全局变量看
     // 集体声明  var a = 9, b = 9, c = 9;
     console.log(a);
     console.log(b);
     console.log(c);
 }
 f1();
 console.log(c);
 console.log(b);
 console.log(a);










