我需要一个简单的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 });


但是,错误跳出“未定义maxSize”。

我该如何解决?

最佳答案

可能有帮助的是使用另一个邪恶的构造with并执行类似的操作:

try {
    compiled = (new Function('with(this){return ' + content + '}')).call(scope);
} catch ( ... )


这将使您的方法可行,但并不安全。

演示:http://jsfiddle.net/4rujz5b7/

09-25 17:15