JavaScript的预解析

预解析:

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

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

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

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

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

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

8.2 预解析案例

例1:

<script>
        var num = 10;
    fun();
    function fun(){
        console.log(num);
        var num = 20;
    }               //undefined
    // 以上代码相当于:
    var num;
    function fun(){
        var num;
        console.log(num);
        num = 20;
    }
    num = 10;
    fun();
</script>


结果:undefined

例2:

<script>
        var a = 18;
    fn1();
    function fn1(){
        var b = 9;
        console.log(a);
        console.log(b);
        var a = '123';
    }
    // 相当于以下代码
       var a;
    function fn1(){
        var b;
        var a;
        b = 9;
        console.log(a);
        console.log(b);
        a = '123';
    }
    a = 18;
    fn1();
</script>

结果:
undefined
9
<script>
        
    fn1();
    console.log(c);
    console.log(b);
    console.log(a);
    function fn1(){
        var a = b = c = 9;
        console.log(a);
        console.log(b);
        console.log(c);
    }
    // 以上代码相当于:
    function fn1(){
/*         var a = b = c = 9;
        // var a = b = c = 9;相当于:var a = 9;b = 9;c = 9; */
        var a = 9;
        b = 9;
        c = 9;
        console.log(a);
        console.log(b);
        console.log(c);
    }
    fn1();
    console.log(c);
    console.log(b);
    console.log(a);
</script>

结果:
9
9
9
9
9
报错a is not defined
posted @ 2021-11-07 22:03  小小狍子  阅读(78)  评论(0)    收藏  举报