【人人都能读标准】3. JavaScript的宿主环境

本文深入解析JavaScript的宿主环境,讲解宿主对象、全局对象的扩展,以及由宿主环境定义的机制,如promise任务执行时机和模块加载。通过示例分析浏览器和Node.js的不同实现,揭示ECMAScript与HTML标准的协作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文为《人人都能读标准》—— ECMAScript篇的第3篇。我在这个仓库中系统地介绍了标准的阅读规则以及使用方式,并深入剖析了标准对JavaScript核心原理的描述。


drake-pic

ECMAScript并不是一门能够独立运行的编程语言,它必须要接入到一个宿主环境(host environment) 中才能发挥作用。

你可以把ECMAScript比作一台发动机,它提供了最核心的动力。但是光有一台发动机是无法产生价值的,你必须配合一个“宿主”设备才能充分发挥它的作用:把发动机装在风扇中,可以让扇叶旋转制造凉风;把发动机装在汽车里,可以推动汽车在马路上奔跑;把发动机装在升降机上,可以把人和货物运往高处…

ECMAScript有两个最常见的宿主:

  • 作为web客户端的浏览器;
  • 作为web服务端的Node.js;

实际上,在宿主实现ECMAScript引擎的过程中,并不一定要使用标准定义的概念(如执行上下文),也不需要完全依照标准定制的算法实现每个API,最终的引擎只需要在“表现层面”上与标准规定的一致即可。

其次,在ECMAScript标准中,会有一些刻意“留白”的地方(也称为延迟定义),这些留白的地方会以宿主定义(host-defined)实现定义(implementation-defined) 标注,表示其逻辑由接入ECMAScript的外部环境自定义,比如标准对Math.random()的定义

Math-random

21.3.2.27 Math.random():

该函数返回一个符号为正的Number值,范围大于或等于0但严格小于1,具体数值通过在该范围内进行随机选择或以近似均匀分布的方式进行伪随机选择,具体使用实现定义的算法或策略。

“宿主(host)“与”实现(implementation)“是不一样的,宿主是实现的集合,比如web浏览器是”宿主“环境,而chrome、safari、Opera这些都是”实现“环境。又因为“宿主”比“实现”更加宏观,所以宿主定义的内容比实现定义更有趣、适用范围更广、研究价值更高。

标准在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值