在eval中禁用变量

时间:2015-06-08 15:17:30

标签: javascript

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

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

1 个答案:

答案 0 :(得分:4)

eval调用包含在IIFE内,并使用局部变量覆盖外部变量:

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

eval代码只能访问IIFE的本地test,而不能访问test内宣布的doSomething

但是,

注意,全局变量无法以这种方式显示为阴影,因为它们可以作为windowglobal的属性进行访问。您可以隐藏window(或global)并拒绝将所有全局变量作为window的属性进行访问。