预解析

预解析:javaScript代码由浏览器中的javaScript解析器来执行的。javaScript解析器在运行javaScript代码的时候分为两步:预解析代码执行

1.我们jS引擎运行JS 分为两步: 预解析 代码执行

(1):预解析 JS引擎会把JS里面所有的var 还有 function 提升到当前作用域的最前面

(2):代码执行 按照代码书写的顺序从上往下执行

例子1:

    console.log(num); // 为什么是undefined 
    var num = 10;
    // JS引擎预解析相当于以下代码

    var num;   // 先把变量提升到当前作用域的最前面,但不提升赋值操作,其他按照代码的书写顺序执行
    console.log(num);
    num = 10;

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

(1):变量提升 就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作

(2):函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数

例子2:

 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(); 

例子3:

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();

例子4:

fun();
    var fun = function() {
      console.log(22);
    }
    //预解析相当于以下代码
    var fun;
    fun();  // 调用必须写在函数表达式的下面
    fun = function() {
      console.log(22);
    }

注意:函数表达式 调用必须写在函数表达式的下面

文章目录