zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    springboot使用mybatis-plus表单更新null值问题通用解决方案
    ASP.NET MVC快速开发框架FastExecutor开发全过程感受及总结
    NetCore实现Transitional自定义注解事物
    NetCore3.0实现自定义IOC容器注入
    ADO.NET事务封装
    ASP.NET MVC模块化开发——动态挂载外部项目
    后台管理tab栏滑动解决方案
    c#使用CefSharp开发winform——环境搭建
    c#通过Redis实现轻量级消息组件
    ASP.NET MVC实现依赖注入
  • 原文地址:https://www.cnblogs.com/2016-zck/p/11017470.html
Copyright © 2011-2022 走看看