`(new Function()).call(...)`的全局作用域与局部作用域

问题描述 投票:0回答:1

我的问题似乎出在我的module.js中。

看来

evaluateJavaScript()
函数正确调用了我的脚本模块: 模块中的
this
是对
new Module()
对象(在
Module.session
内)的引用。

但是当我在这个模块中声明变量或常量时,它们似乎是全局的(

const
var
,还有
let
..)。 AFAIR 在函数内声明变量/常量时,它们 不会是全球性的..

真的不知道问题是什么..我可以想象通过替换任何

var
等来解决问题。 在脚本代码字符串中通过
this.. = 
或 smth.,但这取决于值类型。和我 还考虑过通过向函数传递参数来定义模块环境,但是 然后我需要将它们设置为真实值 - 它们不能用吸气剂等定义..这样 我居住在州..不是吗?

如果有任何帮助,我会很高兴。问候,蛋糕。

eval()
更改了代码字符串(周围的闭包等)后,我来到了
new Function()
, 这真的很棒。但问题仍然存在:声明 vars/consts 全局化..

javascript function scope eval global
1个回答
0
投票

您要求更多代码。所以你在这里:

    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 });
    }

我想可以找到答案,不知道..

© www.soinside.com 2019 - 2024. All rights reserved.