gpt4 book ai didi

JavaScript 范围解析时间

转载 作者:太空宇宙 更新时间:2023-11-04 06:44:51 24 4
gpt4 key购买 nike

我正在编写一个使用 rhino(或浏览器)动态加载 javascript 的应用程序;我有 2 个文件:

// in a file called fooDefinition.js
var definition = {
foo: function(data){return bar(data)},
loadFile: "barLib.js"
}

现在,bar() 的定义如下:

// in a file called barLib.js
function bar(data){
return data + " -> bar!";
}

这就是我想做的:

  1. fooDefinition.js 加载到环境中
  2. 读取 loadFile 的值(在本例中为:"barLib.js")并加载文件(注意:通过外部机制加载文件,而不是通过 javascript 本身!)
  3. 调用foo

外部机制及使用示例(Java伪代码):

// assume engine is a statefull engine (rhino for example)
String str = /*content of fooDefinition.js*/;
engine.eval(str);
String fileToLoad = engine.eval("definition.loadFile");
engine.load(IOUtils.readFileToString(new File(fileToLoad)));
String result = engine.eval("definition.foo('myData')");

我在 Google Chrome 的 JS 控制台中尝试过此操作,没有引发任何错误

我想知道这是完成此类任务的正确方法吗?

TL;博士:定义对象时是否加载并检查对象的属性?

最佳答案

如果您的引擎是有状态的,即它会跟踪定义的变量,那么您的方法是正确的并且将按预期工作
但如果不是,你的方法就会失败,因为当你调用以下

String fileToLoad = engine.eval("definition.loadFile");

您的引擎没有任何有关 definition 对象的信息,因此它返回异常(在 JavaScript 中)。

看来您的引擎是有状态的,并且所有事情都会正常工作

关于JavaScript 范围解析时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24143750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com