使用具有不同局部范围的eval()

时间:2011-08-02 01:15:47

标签: javascript

我想知道如何使用来自不同本地范围的数据调用eval()。

类似的东西:

function doSomething() {
    var y = 1;
    print_and_eval('y+1');
}

function print_and_eval(data) {
    print(data);
    eval(data);
}

修改 - 在我的情况下使用eval()是安全的。请不要将此作为解决方案。 - 主要问题是,我在doSomething()中有局部变量,它们没有在print_and_eval()中定义。然后评估会导致'ReferenceError:y is not defined'错误。

js> print_and_eval('var a = {x:1}')
var a = {x:1}
js> print_and_eval('print(a.x)')    
print(a.x)
typein:3012: TypeError: a is null

我想在这种情况下收到输出'1'。

1 个答案:

答案 0 :(得分:1)

同意“不要使用eval”的其他评论。

话虽如此,另一种替代方案是将其传递给另一个函数:

function doSomething() {
    var y = 1;
    print_and_eval('y+1', y);
}

function print_and_eval(data, y) {
    print(data);
    eval(data);
}

这显然需要您事先了解变量名称。