我的问题似乎出在我的module.js中。
看来
evaluateJavaScript()
函数正确调用了我的脚本模块:
模块中的 this
是对 new Module()
对象(在 Module.session
内)的引用。
但是当我在这个模块中声明变量或常量时,它们似乎是全局的(
const
和var
,还有let
..)。 AFAIR 在函数内声明变量/常量时,它们
不会是全球性的..
真的不知道问题是什么..我可以想象通过替换任何
var
等来解决问题。
在脚本代码字符串中通过 this.. =
或 smth.,但这取决于值类型。和我
还考虑过通过向函数传递参数来定义模块环境,但是
然后我需要将它们设置为真实值 - 它们不能用吸气剂等定义..这样
我居住在旧州..不是吗?
如果有任何帮助,我会很高兴。问候,蛋糕。
在
eval()
更改了代码字符串(周围的闭包等)后,我来到了 new Function()
,
这真的很棒。但问题仍然存在:声明 vars/consts 全局化..
您要求更多代码。所以你在这里:
static evaluateJavaScript(_code, _module, ... _params)
{
if(typeof _code !== 'string') return error('Invalid % argument', null, '_code');
else if((_code = _code.trim()).startsWith('javascript:')) _code = _code.substr(11);
if(!Object._isObject(_module)) _module = Module.getSession(_module, ... _params);
const args = Module.getArguments(_module, _params);
const argKeys = new Array(args.length); const argValues = new Array(args.length);
for(var i = 0; i < args.length; ++i) { argKeys[i] = args[i][0]; argValues[i] = args[i][1]; }
const func = new Function(... argKeys, Module.wrapJavaScriptCode(_code, _module, ... _params));
try { _module.result = func.call(_module, ... argValues); _module.error = null; }
catch(_error) { _module.result = undefined; _module.error = _error; error(_error); }
return Object.null({ module: _module, result: _module.result, error: _module.error, code: _code });
}
我想可以找到答案,不知道..