Javascript 运行时代码编译

Javascript 运行时代码编译,javascript,testing,eval,Javascript,Testing,Eval,我正在从事一个教授JavaScript技术的项目(比如代码学院)。我这样做主要是为了自我教育 我对一个重要部分有困难: 由于整个项目是一个web项目,用户直接在web站点中键入代码。我的问题是,如何检查提交的代码是否通过了当前练习的所有测试?我的方法是评估代码并对其运行单元测试。这里的问题是,如何限制评估代码的范围,如何测试它?我已经找到了如何限制范围的解决方案: function maskedEval(scr) { // set up an object to serve as the

我正在从事一个教授JavaScript技术的项目(比如代码学院)。我这样做主要是为了自我教育

我对一个重要部分有困难: 由于整个项目是一个web项目,用户直接在web站点中键入代码。我的问题是,如何检查提交的代码是否通过了当前练习的所有测试?我的方法是评估代码并对其运行单元测试。这里的问题是,如何限制评估代码的范围,如何测试它?我已经找到了如何限制范围的解决方案:

function maskedEval(scr)
{
    // set up an object to serve as the context for the code
    // being evaluated. 
    var mask = {};
    // mask global properties 
    for (p in this)
        mask[p] = undefined;

    // execute script in private context
    (new Function( "with(this) { " + scr + "}")).call(mask);
}
但是我没有一个解决方案来解决如何对经过评估的代码运行测试。
这是正确的方法还是完全不同的方法?

如果在客户端运行代码,就没有必要限制它的范围,因为它只会影响客户端本身


但是,如果您发送要在服务器端进行评估的代码,您可能希望查看node.js的沙箱库,例如(我在google上找到的第一个沙箱库,可能还有更多)。

为什么要将其简化?只需运行它并检查结果和产生的副作用。顺便说一句,eval“protection”有足够大的洞,可以让卡车通过……当然,但我想把用户代码保存在一个单独的名称空间中,这听起来像是iframe的完美工作。您可以从上面扫描contentWindow,以访问“页面上”的任何内容,前提是域与您所说的匹配。。。