区分当地评估与全球评估

时间:2012-02-05 15:27:07

标签: javascript

请考虑两段代码(第一段打印“Local eval”,第二段打印“Global eval”):

(function f() { 
    var x;
    try {
        eval("x");
        console.log('Local eval');
    }
    catch (e) {
        console.log('Global eval');
    }
}())

var globalEval = eval;
(function f() { 
    var x;
    try {
        globalEval("x");
        console.log('Local eval');
    }
    catch (e) {
        console.log('Global eval');
    }
}())

事实证明,即使globalEval === eval评估为trueglobalEvaleval 行为也不同,因为它们的名称不同。 (如果精确写入eval,则eval只能是本地的。)

我如何区分两种逃避?有没有办法提取变量标签来推断行为?

1 个答案:

答案 0 :(得分:2)

有趣。但是,由于您可以控制定义eval的引用的位置/时间,因此您可以说明如何区分它们。例如,有一个具有“函数指针”的对象和指示范围的东西 - 如果你定义它,你知道你的位置。

即。 myEvaluator.scope会告诉您有关eval范围被捕获的位置的信息,myEvaluator.eval可用于评估。