我正在尝试在特定上下文中执行 eval。我找到了答案 here有用。但是,我在 Chrome 版本 53.0.2785.143 m 中出现以下行为。其他浏览器没试过。我使用的代码如下:
function evalInContext(js, context) {
return function() { return eval(js); }.call(context);
}
console.log(evalInContext('x==3', { x : 3})) // Throws
console.log(evalInContext('this.x==3', { x : 3})) // OK
但是我预计第一次调用 evalInContext
不会抛出。知道为什么会发生这种情况吗?
最佳答案
虽然我推荐@trincot 提供的答案,尤其是很棒的链接。我在这里发布我对我遇到的问题的解决方案
function evalInContext(scr, context)
{
// execute script in private context
return (new Function( "with(this) { return " + scr + "}")).call(context);
}
with(this)
表达式允许context
对象的成员变量出现在表达式scr
的执行范围内。
归功于 this answer类似的问题
关于在不使用 this 关键字的情况下在上下文中进行 javascript eval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40107919/