js引擎的执行机制

73 阅读1分钟
    /* 
    js引擎的执行机制: 
    (1)预解析(变量声明提升 和 函数声明提升 提升到当前作用域的最前面)
    (2)执行代码
     */
    
    //  1.变量提升
    // 第一种情况:
    console.log(num); // undefine
    var num = 10;
    // 相当于代码
    var num;
    console.log(num);
    num = 10;

    // 第二种情况:
    // fun(); // 报错
    var fun = function () {
        console.log(1);
    }
    // 相当于代码
    var fun;
    fun();
    fun = function () {
        console.log(1);
    }



    // 2.函数提升
    fun1();  // 2
    function fun1 () {
        console.log(2);
    }

    // 相当于代码
    function fun1 () {
        console.log(2);
    }
    fun1();
    
    
    
    /*
    思考案列:
    */
    // 案例1
    var num1 = 10;
    function fun2() {
        console.log(num1); // undefine
        var num1 = 20;
        console.log(num1);  // 20
    }
    fun2();
    
    // 相当于代码
    var num1;
    function fun2() {
        var num1;
        console.log(num1); // undefine
        num1 = 20;
        console.log(num1);  // 20
    }
    num1 = 10;
    fun2();
    
    
    // 案例2
    ript>
    fun3();
    console.log(b);  // 9
    console.log(c);  // 9
    console.log(a);  // 报错
    function fun3 () {
        var a = b = c = 9;  // 相当于 var a = 9; b = 9; c = 9;  b 和 c 没有用var声明,被强制为全局变量
        console.log(a);  // 9
        console.log(b);  // 9
        console.log(c);  // 9
    }

    // 相当于代码
    function fun3 () {
        var a;
        a = 9;
        b = 9;
        c = 9;
        console.log(a);  // 9
        console.log(b);  // 9
        console.log(c);  // 9
    }
    fun3();
    console.log(b);  // 9
    console.log(c);  // 9
    console.log(a);  // 报错