• JS运行环境 Amy


    JS的运行环境一般由宿主环境执行期环境共同构成,宿主环境是由外壳程序(如web浏览器就是一个外壳程序)生成,执行期环境是由嵌入到外壳程序中的JS引擎(/JS解释器)生成的,在执行期环境JS可以生成内置静态对象、初始化执行环境等。

    宿主环境一般由外壳程序创建和维护,在一个宿主环境中可以运行多种脚本语言(如VBScript),以虚拟机的方式提供一个跨语言跨平台的宿主环境

    宿主环境一般会创建一套公共对象系统,该系统对所有脚本开放,允许它们自由访问,还提供了公共接口,用来装载不同的脚本语言引擎

    脚本语言本身并不提供IO,也没有与系统和外界通信的能力,更不存在管理内存,修改注册表等行为,这些行为全部由宿主环境完成

    外壳程序不仅是web浏览器,任何可以提供JS引擎执行环境的都可以称之为外壳程序,外壳程序还可以利用符合标准的扩展接口接纳更多的插件、组件或ActiveX控件等DLL应用

    执行期环境是由宿主环境通过脚本引擎创建的一个代码解析初始化环境

    JS的解析过程包括编译和运行

    编译:预处理,在这一过程中,JS解释器完成对JS代码的预处理,即将JS脚本代码转换成字节码

    运行:在这一阶段,将编译结束时生成的字节码转换成机械码,按顺序执行

    JS是一种解释型语言,所谓解释型是指代码在执行时被解释器一行一行动态编译和执行,而不是执行前完成编译,即边编译边执行,

    一般的编译性语言的编译过程是由编译器完成,进行词法分析、语法分析、语义检查、代码优化、最后生成字节码

    JS的是词法分析、语法分析,建立语法树,开始解释执行

    执行期

    JS引擎按着作用域机制来执行,JS的变量和函数作用域是在定义时决定的,而不是执行时才决定的,所以JS解释器只需要通过静态分析就能确定每个变量和函数的作用域,这种作用域称为静态作用域

    当JS解释器执行函数时,先创建一个执行环境,在这个执行环境中创建一个调用对象,在这个对象内存储当前域中所有的局部变量、参数、嵌套函数、外部引用和父级引用列表等

    通过声明语句定义的变量和函数在预编译阶段就已经存储到符号表中了,然后把它们与调用对象中的同名属性进行映射即可。调用对象的生命周期和函数的生命周期一致

    JS解释器通过作用域链将多个嵌套的作用域连在一起,并利用该链条来检索变量的值

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    CentOS7 64位下MySQL5.7安装与配置
    Linux CentOS7.0下JAVA安装和配置环境变量
    在MySQL中使用explain查询SQL的执行计划
    ionic3中使用自定义配置
    RabbitMQ发布订阅实战-实现延时重试队列
    springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other)
    Python之Mysql及SQLAlchemy操作总结
    数据库分库分表思路
    RPC框架实践之:Apache Thrift
    vue使用watch 观察路由变化,重新获取内容
  • 原文地址:https://www.cnblogs.com/amy2011/p/3131565.html
Copyright © 2020-2023  润新知