JS预解析

118 阅读1分钟

#JS引擎在运行JS代码时分为两步: 1.预解析 2.执行代码

1.预解析 ①js引擎会把js里面所有的var和function提升到当前作用域的最前面 ②预解析分为变量预解析(变量提升)和函数预解析(函数提升) ③变量提升 :就是把所有的变量声明提升到当前的作用域最前面,不提升赋值操作 ④函数提升:就是把所有的函数声明提升到当前作用域的最前面 ,不调用函数 2.执行代码 ①按照从上往下的顺序执行

    //1.
    console.log(num);
    var num = 0;

    //相当于执行了以下代码
    var num;
    console.log(num);  //num的值为undefined
    num = 0;  

    //2.
    fun();
    var fun = function() {
        console.log(22);
    }

    //相当于执行了
    var fun;
    fun();
    fun = function() {
        console.log(22);  //报错
    }

    //3
    var num = 10;
    fun();
    function fun() {
        console.log(num);
        var num = 20;
    }

    //相当于执行了
    var num;
    function fun() {
        var num;
        console.log(num);   //num的值为undefined
        num = 20;
    }
    num = 10;
    fun(); 

    //4.
    fl();
    console.log(c);
    console.log(b);
    console.log(a);
    function fl() {
        var a = b = c = 9;
        console.log(a);
        console.log(b);
        console.log(c);
    }

    //相当于执行了
    function fl() {
        var a;
        a = b = c = 9;
        console.log(a);  //a的值为9
        console.log(b);  //b的值为9
        console.log(c);  //c的值为9
    }
    fl();
    console.log(c);   //c的值为9   注意:c和b没有被声明在局部作用域中,故c和b为全局变量,而a被声明了故a为局部变量
    console.log(b);  //b的值为9 
    console.log(a);  //报错