【问题标题】:Disable variable in eval在 eval 中禁用变量
【发布时间】:2015-06-08 23:29:17
【问题描述】:

有没有办法为 eval 禁用某些变量?

var test = 'example';
eval('console.log(test)'); // here I would like test null
console.log(test); // here test should display 'example'

【问题讨论】:

  • 请为您的问题提供更多背景信息。 ,这通常不可能以这种特定方式进行。但是,可能有多种方法可以实现您真正想要实现的目标。
  • test null 是什么意思?那么eval的结果应该是什么呢?
  • 那怎么会是空的??如果没有定义,那将是一个错误。怎么做?如果您不想让任何全局变量溢出到 eval 中,则必须创建一个带有空白 HTML 页面的 iframe 并在其中进行评估。
  • 为什么问题被关闭了?尽管更多的上下文会有所帮助,但所问的内容很清楚 IMO。
  • 投票重新开放,因为有一个有效的问题......

标签: javascript


【解决方案1】:

将您的 eval 调用封装在 IIFE 中,并使用局部变量隐藏外部变量:

function doSeomthing() {
    var test = 'example';
    (function() {
        var test = null;
        eval('console.log(test)');
    })();
    console.log(test);
}

eval 代码只能访问 IIFE 的本地 test,而不是 doSomething 中声明的 test

注意,但是,全局变量不能以这种方式隐藏,因为它们可以作为windowglobal 的属性访问。您可以隐藏window(或global)并拒绝访问所有全局变量作为window 的属性。

【讨论】:

  • 另外,如果想要阻止访问所有局部变量(但不是全局变量),可以使用 Function 构造函数:new Function(strToEval)() 或间接 eval 调用:(0, eval)(strToEval)。跨度>
  • 谢谢,我想这就是我需要的。我明天在我的服务器上试试。
猜你喜欢
  • 1970-01-01
  • 2011-09-07
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
相关资源
最近更新 更多