zoukankan      html  css  js  c++  java
  • 浏览器解析JavaScript原理

    浏览器解析JavaScript原理特点:
     1.跨平台    
      2.弱类型     javascript  定义的时候不需要定义数据类型,数据类型是根据变量值来确定的
                         var a = 10;    数字类型
                         var a = true   boolean类型
        强类型: 定义变量的时候需要定义变量的类型:例如java,C#中的int a = 10   boolean a = true,直接确定了数据类型
        3.解释执行,逐行执行
               javascript 执行过程
               1.语法检测       看你有没有基本的语法错误,例如中文,关键字错误...
                2.词法分析(预编译)
               3.逐行执行

    预编译的过程(两种情况)

    1.全局 直接是script标签中的代码,不包括函数执行
    执行前:              

    • 1.首先生成一个GO(global object)对象,看不到,但是可以模拟出来用来分析
    • 2.分析变量声明,变量名为属性名,值为undefined
    • 3.分析函数声明,函数名为属性名,值为函数体,如果函数名和变量名相同,则无情覆盖
    • 4.逐行执行,分析过(变量声明,函数声明)不用管了,只管赋值(变量赋值)

    先来看一个例子

    1.首先生成一个GO(global object)对象,看不到,但是可以模拟出来用来分析
                    GO = {   
                  }
                   2.分析变量声明,变量名为属性名,值为undefined
                   GO = {
                        a : undefined,
                       b : undefined,
                       c : undefined
                    }
                    3.分析<b>函数声明</b>,函数名为属性名,值为函数体,如果函数名和变量名相同,则无情覆盖
                    GO = {
                        a : function a(){
                  
                        },
                      b : undefined,
                       c : undefined,
                      fun : function fun(){
                  
                       }
                 }

                    此时,GO就是预编译完成的最终对象,词法分析结束
                   4.逐行执行,分析过(变量声明,函数声明)不用管了,只管赋值(变量赋值)
                     a赋了一次值,值改变为100
                   GO = {
                      a : 100,
                      b : undefined,
                     c : undefined,
                       fun : function fun(){
                   
                    }

                   }

    二、函数执行

      当函数调用,也是会生成自己的作用域(AO:active object)AO活动对象。  函数调用时候,执行前的一瞬间产生的,如果有多个函数的调用,会产生多个AO

    •   1、函数执行前的一瞬间,生成AO活动对象
    •   2、分析参数,形参作为对象的属性名,实参作为对象的属性值
    •   3、分析变量声明,变量名为属性名,值为undefined,如果遇到AO对象上属性同名,不去做任何改变(注意这里的属性同名是不做任何改变的)
    •   4、分析函数声明,函数名为属性名,值为函数体,如果遇到AO对象上属性同名,则无情覆盖
    •   5、逐行执行

    例子

                

             1.生成GO
               GO = {
                    fun : function
                }
                2.逐行执行
                3.函数的调用,就会生成fun.AO
                fun.AO = {
                   
                }
                4.分析参数
                fun.AO = {
                    num : 10
                }
                5.分析var
                fun.AO = {
                    num : 10
                }
                6.分析函数声明 没有,略
                fun.AO = {
                    num : 10
                }
                7.逐行执行   第11行的时候,发生了赋值
                fun.AO = {
                    num : 5
                }
                              

  • 相关阅读:
    数字配对(bzoj 4514)
    任务查询系统(bzoj 3932)
    楼房重建(bzoj 2957)
    Hotel(poj 3667)
    Can you answer these queries(spoj 1043)
    亚瑟王(bzoj 4008)
    潘多拉的盒子(bzoj 1194)
    Circling Round Treasures(codeforces 375c)
    莫队算法---基础知识介绍(转载)
    HDU 1141---Brackets Sequence(区间DP)
  • 原文地址:https://www.cnblogs.com/gyix/p/10139813.html
Copyright © 2011-2022 走看看