请考虑两个代码片段(第一个打印"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,globalEval和eval 不同的行为,因为他们有不同的名称.(如果精确写入,则eval只能是本地的eval.)
我怎样才能区分两个人的逃亡?有没有办法提取变量标签来推断行为?
有趣的。但是,由于您可以控制eval定义引用的位置/时间,因此您可以说出如何区分它们。例如,有一个对象,它具有“函数指针”和一些指示范围的东西 - 如果您定义了它,您就知道自己所处的位置。
即myEvaluator.scope会告诉您有关 eval 范围捕获位置的信息,并且myEvaluator.eval可用于评估。
| 归档时间: |
|
| 查看次数: |
604 次 |
| 最近记录: |