如何评估一个JavaScriptstring,并从中调用函数(无窗口)

我正在开发一个工具来帮助教授编程,并且在某个时候,我有客户端将javascript作为string发送到服务器。 我总是打算从他们的代码中调用函数A和B,但我不确定如何限制他们的访问?

我现在在做什么:

eval(code); userFunctionA = eval("getA"); userFunctionB = eval("getB"); var result = userFunctionA(param1, param2); 

不幸的是,通过使用eval,他们可以访问我所有的全局variables和其他函数,我如何限制他们的访问?

这是我发现的最好的参考,但他们非常关心“窗口”,因为我是一个节点服务器,我没有一个窗口,我不能使用build议的iFrame或工作人员: 是否有可能限制范围的JavaScript函数?

注意:我正在寻找一种解决scheme,在阅读它们之前,不需要我将它们的代码string分解成函数,因为这会禁用类似以下内容的学习:

 function a() {fdafs} b = a(); a = function (x){fsadg} 

如果你使eval()代码成为自己的模块,那么当require 'd'时,你可以得到module wrapper的好处。 模块包装将全局范围限制在模块中。 基本上,这是一种命名空间的forms。

所以,如果你只是做

evaluator.js

 module.exports = function(funcToCall) { eval(funcToCall); } 

app.js

 const evaluator = require('evaluator'); evaluator(code);