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

  • 相关阅读:
    表单自动填充autocomplete的兼容性方案
    函数的默认参数值
    利用zookeeper搭建hadoop HA集群
    zookeeper设置开机启动项
    zookeeper集群挂了的恢复流程
    zookeeper集群搭建
    docker 安装ElasticSearch的中文分词器IK
    [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    把mysql服务设置开机启动项
    docker-compose的使用
  • 原文地址:https://www.cnblogs.com/2016-zck/p/11017470.html
Copyright © 2011-2022 走看看