Javascript JS如何将对象设置为作为内容进行评估?
我需要一个简单的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
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:那又怎样?编译后的函数不是。