zoukankan      html  css  js  c++  java
  • js预编译

    预编译前奏

    1.imply global暗示全局变量,如果变量未经申明就赋值,此变量就为全局变量所有

     function fun(){
                a=20
            }
            fun();
            console.log(a)/*a为20*/

    2.一切声明的全局变量,全是window的属性。

    即var a=10等于window.a

     var a=10;
            var b=20;
            var c=30;
            console.log(window)

    3.预编译发生在函数声明的前一刻

    预编译主要分为两种

    全局(相当于只要局部的2,4部分):

    全局是script标签中的代码,不包括函数执行

    1.生成一个GO对象找声明变量,变量名为属性名,值为undefined;

    2.找函数声明,函数名为属性名,值为函数体,如果函数名和变量名一样则无情覆盖

    函数内部(局部):

    1创建AO对象

    2找形参和变量声明,将形参和变量名作为AO的属性名,值为undefined

    3.将实参和形参统一------也就是将实参的值赋给形参

    4找函数声明,函数名为属性名,值为函数体,如果函数名和变量名一样则无情覆盖

    全局实例:

    <script type="text/javascript">
            console.log(a)
            var a=10;
            console.log(a)
            function a(){}
            console.log(a)
            </script>

    1.创建GO对象:

    GO{

    a:undefined

    }

    2.找函数声明,函数名为属性名,值为函数体,如果函数名和变量名一样则无情覆盖:

    GO{

    a:function a(){}

    }

    3.逐行执行:

    函数内部实例:

    <script type="text/javascript">
            function fn(a){
                console.log(a);
                var a = 123;
                console.log(a);
                function a(){}
                console.log(a);
                var b = function(){}
                console.log(b);
                function d(){}
            }
            fn(1);
            </script>

    1.创建AO对象(执行上下文):

    AO{

    }

    2.找形参和变量声明,将将形参和变量名作为AO的属性名,值为undefined:

    AO{

    a:undefined

    b:undefined

    }

    3.将实参和形参统一------也就是将实参的值赋给形参:

    AO{

    a:1

    b:undefined

    }

    4.找函数声明,函数名为属性名,值为函数体,如果函数名和变量名一样则无情覆盖

    AO{

    a:function a(){}

    b:  undefined

    }

    5.然后逐行执行:

  • 相关阅读:
    Vue
    linux-----docker
    linux基础
    Flask基础
    websocket
    css
    Mysql数据库基础
    IO多路复用
    线程和协程
    sh_02_del关键字
  • 原文地址:https://www.cnblogs.com/xuhanghang/p/10146258.html
Copyright © 2011-2022 走看看