对于Nashorn中的ENGINE_SCOPE和GLOBAL_SCOPE绑定有点困惑,试图按照讨论here进行。
在阅读本文之前,我对范围的理解(至少在rhino中)是GLOBAL_SCOPE中的单个共享绑定和ENGINE_SCOPE中针对每个引擎的单独绑定。然而,这个页面似乎在说每个引擎都将基本的javascript构造存储在引擎ENGINE_SCOPE中存在的绑定中(混淆地称为" Nashorn Global Scope")。这听起来像是使GLOBAL_SCOPE绑定无效(因为他们无法访问任何这些基本结构)。
我尝试做的是创建一个上下文,我可以将一些脚本注入其中,然后在这些脚本的上下文中重复评估不同的绑定。但是,如果我可以访问的唯一上下文是单个引擎ENGINE_SCOPE(因为上面的任何内容都不能访问基本的javascript构造),那么似乎任何本地调用都必须添加到那些相同的绑定。有谁知道如何在Nashorn中管理多个级别的绑定?
答案 0 :(得分:2)
如果在ENGINE_SCOPE中找不到变量,则搜索GLOBAL_SCOPE绑定。 Nashorn的全局对象(具有JS Object,Number,RegExp,parseInt等的对象)被包装为Bindings - 这就是您的ENGINE_SCOPE。例如。如果您将“foo” - >“hello”地图条目放入GLOBAL_SCOPE中,这将在脚本中显示 - 如果ENGINE_SCOPE没有名称为“foo”的地图条目。