js预编译

js函数预编译

创建AO 第一步,寻找参数变量住。

提升变量未定义,参数赋值相统一。

声明函数最后找,赋值函数身体到。

已经提升不用看,变量赋值最果断。

创建AO 第一步,寻找参数变量住。

js函数预编译

第一步创建 AO对象

AO{

}

第二部寻找变量声明以及形参

提升变量未定义,参数赋值相统一。

将他们放入 AO对象中 并且值为undefined

然后将形参实参相统一

声明函数最后找,赋值函数身体到。

最后一步是 寻找函数声明 并赋值

已经提升不用看,变量赋值最果断。

然后在函数执行的时候 已经提升到 AO的部分就忽略不看

 <script>

    /*

    第一步创建 AO 对象

    *AO{

        第二部 寻找变量声明

        a:undefined,

        b:undefined,

        第三步 实参形参相统一

        a:1,

        b:3,

        第四部提升函数

        a:function a() {},

        b:3,

    }

    */

    function prepar(a, b) {

        console.log(b); // -------> 3

        var a = 4; //运行到这儿 a = 4

        var b = 5; //运行到这儿 b = 5

        console.log(a); //-------------->4

        function a() {

        }

        var b = function b() {

                //注意这是函数表达式 不是声明所以

                //不会提升函数 只会提升前边的变量声明

            }

            //运行到这儿 b = function b() {}

        console.log(b);//-------------->function b() {}

    }

    prepar(1, 3);

</script>

原文地址:https://www.cnblogs.com/weixin2623670713/p/13616494.html