区分当地评估与全球评估

Ran*_*lue 6 javascript

请考虑两个代码片段(第一个打印"Local eval",第二个打印"Global eval"):

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

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

事实证明,即使globalEval === eval计算结果为true,globalEvaleval 不同的行为,因为他们有不同的名称.(如果精确写入,则eval只能是本地的eval.)

我怎样才能区分两个人的逃亡?有没有办法提取变量标签来推断行为?

Kie*_*one 2

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

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