此代码在运行 eval 的同一范围内工作:
function compile(fn) {
//Actually calls fn.toString() then compiles some es.next type
//features to current versions of es.
return 'function () { return a; }';
}
function runAsStringA() {
var a = 10;
var compiled = eval(compile());
return compiled();
}
这不起作用,但符合我在理想世界中想做的事情:
function compile(fn) {
return eval('function () { return a; }');
}
function runAsStringA() {
var a = 10;
var compiled = compile();
return compiled();
}
本质上,我需要一种在父级范围内进行评估的方法。
我试过了:
function compile(fn) {
return eval.bind(this, 'function () { return a; }');
}
function runAsStringA() {
var a = 10;
var compiled = compileSpecialFunction()();
return compiled();
}
问题是编译后的函数没有进入a
范围。
我正在尝试在 node.js 环境中使用它,所以如果解决方案仅适用于 node.js 就可以了
它甚至可能需要一些本机代码,尽管我没有编写本机插件的经验。