获取对JavaScript中eval()期间创建的局部变量的引用
在下面的场景中,如果我不知道变量的名称,如何获取对eval()期间声明的变量的引用获取对JavaScript中eval()期间创建的局部变量的引用,javascript,eval,Javascript,Eval,在下面的场景中,如果我不知道变量的名称,如何获取对eval()期间声明的变量的引用 function test() { eval("var myVariable = 5"); var locals = magic() // TODO What should we do here? alert(locals["myVariable"]); // returns myVariable } 请注意:正在评估的JavaScript来自可信源。eval()与调用者在同一范围内运行,因此这将起
function test() {
eval("var myVariable = 5");
var locals = magic() // TODO What should we do here?
alert(locals["myVariable"]); // returns myVariable
}
请注意:正在评估的JavaScript来自可信源。eval()与调用者在同一范围内运行,因此这将起作用:
function test() {
eval("var myVariable = 5");
var locals = {};
locals.myVariable = myVariable; // TODO What should we do here?
alert(locals["myVariable"]); // returns myVariable
}
但是您无法确定eval()调用中声明了哪些变量(如果您需要的话)
对我有用eval()
不会创建新的作用域。简单如下:
eval("var myVariable = 5");
//no magic is needed
alert(myVariable); // returns myVariable
您是否有能力影响传递给
eval()
的代码的外观?换言之,你能为了让这项工作顺利进行而改变代码吗?或者你是否被来自另一个源的代码所困扰,而你不能改变它?我可以改变代码;您的建议是什么?如果您可以让代码显式地声明一个具有可预测名称的对象,然后将其他(不可预测的)属性放入该对象中(请参见@tomalak的答案),那么您就可以使用它了。但是eval()
不会创建一个新的作用域,据我所知,无法获得对本地“closure”作用域的引用,从而让您将其视为一个对象。我已经澄清了这个问题,指出我事先不知道这些变量的名称。如果我不知道这些变量的名称,该怎么办?也就是说,我需要先找出他们的名字。
eval("var myVariable = 5");
//no magic is needed
alert(myVariable); // returns myVariable