• javascript预编译


    预编译四部曲

    1、创建AO对象(执行期上下文)

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

    3、将实参与形参相统一

    4、在函数体寻找函数声明,AO对应属性值赋予函数体

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    </head>
    <body>
    <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>
    </body>
    </html>

    函数预编译过程

    1、创建AO对象

    AO{

    }

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

    AO{

      a : undefined

      b : undefined

    }

    3、将实参与形参相统一

    AO{

      a : 1

      b : undefined

    }

    4、在函数体寻找函数声明,AO对应属性值赋予函数体

    AO{

      a : function() a{}

      b : undefined

      d : function d(){}

    }

    js是解释性语言,读取一行,解释一行,在执行函数之前,先进行预编译,

    此时代码内 a b d 的值为

    AO{

      a : function a(){}

      b : undefined

      d : function d(){}

    }

    接着逐行读取代码,覆盖变量值。在预编译已编译的在执行时不再编译。

    执行结果:

    全局预编译

    1、创建一个GO对象(全局变量对象windoww)

    2、寻找变量声明,将变量名作为AO属性名。值为undefined.

    3、在函数体寻找函数声明,AO对应属性值赋予函数体

    <!DOCTYPE html>
    <html>
    <head>
    	<title></title>
    </head>
    <body>
    <script type="text/javascript">
    	console.log(a)
    	var a = 234
    	function a(){}
    	console.log(a)
    </script>
    </body>
    </html>

    预编译过程

    1、创建一个GO对象(全局变量对象windoww)

    GO {}

    2、寻找变量声明,将变量名作为AO属性名。值为undefined.

    GO{

      a : undefined

    }

    3、在函数体寻找函数声明,AO对应属性值赋予函数体

    GO{

      a : function a(){}

    }

    执行结果

    javascript的预编译练习题:https://www.cnblogs.com/2016-zck/p/11018464.html

  • 相关阅读:
    Ubuntu 14.04 设置静态IP
    Spring MVC 入门就这一篇
    一站式轻量级框架 Spring
    深入 Web 请求过程
    使用 Docker Compose 搭建 Nexus 依赖私服及使用配置
    Spring Cloud Alibaba 与 Dubbo 的完美融合
    使用 Spring Cloud Alibaba Nacos Config 作为配置中心
    使用 Spring Cloud Alibaba Nacos 实现服务注册与发现
    Spring Boot 监听 Redis Key 失效事件实现定时任务
    使用 Spring Boot Admin 监控服务
  • 原文地址:https://www.cnblogs.com/2016-zck/p/11017470.html
Copyright © 2020-2023  润新知