【发布时间】:2011-11-03 22:15:30
【问题描述】:
好的——我有一个非常特殊的情况,我需要使用 eval()。在人们告诉我根本不应该使用 eval() 之前,让我透露一下我知道 eval 的性能问题、安全问题和所有这些问题。我在一个非常狭窄的情况下使用它。问题是这样的:
我寻找一个函数,它将向传递给它的任何范围写入变量,允许这样的代码:
function mysteriousFunction(ctx) {
//do something mysterious in here to write
//"var myString = 'Oh, I'm afraid the deflector shield will be
//quite operational when your friends arrive.';"
}
mysteriousFunction(this);
alert(myString);
我尝试使用全局 eval() 来执行此操作,使用闭包、'with' 关键字等来伪造执行上下文。我无法使其工作。我发现唯一有效的是:
function mysteriousFunction(ctx) {
ctx.eval("var myString = 'Our cruisers cant repel firepower of that magnitude!';");
}
mysteriousFunction(this);
alert(myString); //alerts 'Our cruisers cant repel firepower of that magnitude!'
但是,上述解决方案需要 object.eval() 函数,该函数已被弃用。它有效,但它让我紧张。有人愿意对此进行破解吗?感谢您的宝贵时间!
【问题讨论】:
-
我只想说我喜欢你对示例代码的品味。
-
@Alex:将其称为
this.myString是否有问题?有关详细讨论,请参阅我的答案中的 cmets。
标签: javascript eval