Nashorn和脚本绑定范围

Ste*_* B. 11 nashorn

关于Nashorn中的ENGINE_SCOPE和GLOBAL_SCOPE绑定有点困惑,试图按照这里的讨论.

在阅读本文之前,我对范围的理解(至少在rhino中)是GLOBAL_SCOPE中有一个共享的Bindings,以及每个引擎的ENGINE_SCOPE中的单个绑定.然而,这个页面似乎在说每个引擎都将基本的javascript构造存储在引擎ENGINE_SCOPE中存在的绑定中(令人困惑地称为"Nashorn全局范围").这听起来像是使GLOBAL_SCOPE绑定无效(因为它们无法访问任何这些基本结构).

我要做的是创建一个上下文,我可以注入一些脚本,然后在这些脚本的上下文中重复评估不同的绑定.但是,如果我可以访问的唯一上下文是单个引擎ENGINE_SCOPE(因为上面的任何内容都无法访问基本的javascript构造),那么似乎任何本地调用都必须添加到那些相同的绑定.有谁知道如何在Nashorn中管理多个级别的绑定?

A. *_*jan 2

如果在 ENGINE_SCOPE 中找不到变量,则搜索 GLOBAL_SCOPE 绑定。Nashorn 的全局对象(具有 JS 对象、Number、RegExp、parseInt 等的对象)被包装为 Bindings - 这就是您的 ENGINE_SCOPE。例如。如果将“foo”->“hello”映射条目放入 GLOBAL_SCOPE 中,则该条目将在脚本中可见 - 如果 ENGINE_SCOPE 没有名为“foo”的映射条目。

  • 实际上,如果您熟悉这一点,也许您知道这个问题的答案:当我调用 scriptEngine.getContext() 时,我得到的是新实例还是同一个实例?如果相同,我如何获得新的(不是共享的)上下文?scriptContext.getBindings() 怎么样?新的绑定实例?旧的绑定实例?拥有一个示例将非常有帮助,尤其是多线程示例,即多个资源加载共享脚本并每个资源都使用各自的绑定运行它的示例。令人沮丧的是,很难找到关于其行为方式的清晰文档。 (3认同)