在不使用 this 关键字的情况下在上下文中进行 javascript eval

标签 javascript eval

我正在尝试在特定上下文中执行 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/

相关文章:

javascript - 有条件地分配对象值?

r - 在构建分数多项式函数时避免 eval(parse())

javascript - 是使用window.location.href ("javascript://code");和 eval 一样糟糕?

python - 即使给出了正确的代码,eval 也会给出语法错误

ruby 性能 : define method with define_method or eval

javascript - 避免使用javascript构造?

javascript - 在javascript中从数组访问对象?

git - 如何避免将 'eval' 与 'git-for-each-ref' 结合使用?

javascript - 我应该为实时 Web 应用程序使用 Node.js 而不是 Rails 吗?

javascript - HTTP 请求方法和 AJAX。到底是怎么回事?