Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS如何将对象设置为作为内容进行评估?_Javascript_Eval - Fatal编程技术网

Javascript JS如何将对象设置为作为内容进行评估?

Javascript JS如何将对象设置为作为内容进行评估?,javascript,eval,Javascript,Eval,我需要一个简单的js引擎。 因此,我创建了一个函数: function compile(tpl, scope){ return tpl.replace(/\{\{([\s\S]+?)\}\}/g, function(caught, content){ var compiled; try{ compiled = eval.call(scope, content); }catch(e){ compiled = caugh

我需要一个简单的js引擎。 因此,我创建了一个函数:

  function compile(tpl, scope){
    return tpl.replace(/\{\{([\s\S]+?)\}\}/g, function(caught, content){
      var compiled;
      try{
        compiled = eval.call(scope, content);
      }catch(e){
        compiled = caught;
        console.error(e);
      }finally{
        return compiled;
      }
    });
  }
好的,调用它

    compile('<div>{{ maxSize / 1024 / 1024 }}M</div>', { maxSize: 1048576 });
compile({{maxSize/1024/1024}}}M',{maxSize:1048576});
但是,跳出一个错误“未定义maxSize”


我怎样才能解决它呢?

可能有帮助的是使用另一种邪恶的构造并做类似的事情:

try {
    compiled = (new Function('with(this){return ' + content + '}')).call(scope);
} catch ( ... )
这将使您的方法起作用,但不会使其安全


演示:

不能将对象作为变量范围传递
eval
将使用它的封闭范围。这可能会有帮助:将
一起使用是个好主意。谢谢,但我的要求很严格mode@gordomium:那又怎样?编译后的函数不是。