如何理解JavaScript中的Realm(领域)概念?
聊聊ECMAScript里的Realm概念
ECMAScript规范里专门引入了「realm」这个核心概念——所有ECMAScript代码在执行前,必须先关联一个realm。从概念上拆解的话,一个realm就像一个独立的JS运行沙箱,包含这些关键组成部分:
- 一套专属的固有对象(比如
Object、Array这些内置构造函数) - 一个独立的ECMAScript全局环境
- 在这个全局环境作用域下加载的所有ECMAScript代码
- 配套的执行状态和相关资源
关于跨realm的对象,在Rauschmayer所著《Speaking JavaScript》里也提到过很典型的场景:
在浏览器中,每个框架(frame)和窗口(window)都对应一个独立的realm。比如你从一个iframe里获取到一个数组对象,它的
constructor其实是那个iframe环境里的Array,和主页面的Array并不是同一个构造器——这就是跨realm对象的典型表现,看起来是同类型的对象,但本质上隶属于不同的realm运行环境。
内容的提问来源于stack exchange,提问作者M. Twarog
相关产品推荐
相关产品推荐

