Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取对JavaScript中eval()期间创建的局部变量的引用_Javascript_Eval - Fatal编程技术网

获取对JavaScript中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()与调用者在同一范围内运行,因此这将起

在下面的场景中,如果我不知道变量的名称,如何获取对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